1. Получить посты (1 запрос, если не тянуть и не праймить кеши метаданных и таксономий).
2. Из массива постов выдернуть их IDшки (wp_list_pluck или аналогичным методом).
3. Получить комменты c помощью WP_Comment_Query, передав IDшки из п.2 в свойство post__in (1 запрос, если не тянуть и не праймить кеши метаданных и постов)
4. Вывести посты циклом, в каждой итерации забирать необходимые комменты из результата п.3
Итого: 2 запроса.
Впрочем, в реальной жизни вам все-таки понадобятся метаданные как постов, так и комментов. Поэтому запросов будет больше, но не N+1.
А вообще такие штуки не мешало бы кешировать целиком, или хотя бы результаты запросов, в transients. На какой период - зависит от частоты обновления инфы на сайте. От 5 минут до часа.