Я бы сделал JOIN
и отсортировал бы данные после. Что-то вроде:
SELECT articles.id, articles.text, articles.date,
comments.id, comments.text, comments.date
FROM articles LEFT JOIN comments ON (comments.article_id = articles.id)
WHERE {some criteria} ORDER BY articles.date, comments.date
Проблема производительности с наличием дополнительных комментариев, которые были бы скрыты, на самом деле незначительна - и у вас нет дополнительных накладных расходов при создании ajax-запроса для загрузки других комментариев, когда они нажимают эту кнопку «увидеть все» - вы можете просто скрыть их, а затем отобразить их мгновенно.
Если вы хотите получить только 40 лучших постов, вам нужно добавить это условие в предложение where (на самом деле вы также можете обернуть любую фильтрацию, в которой вы работаете):
WHERE articles.id IN (SELECT id FROM articles ORDER by articles.date LIMIT 40)