Вы пытались реализовать это так, чтобы эти числа вычислялись динамически при загрузке страницы?Откуда вы знаете, что это действительно проблема производительности? Расчеты в наши дни довольно быстрые.
В противном случае поместите поле счетчика рядом с каждой (под) категорией.При вставке (/ удалении) нового сообщения вы обновляете счетчик всех категорий, к которым он принадлежит.
В результате при запросе любой категории или набора категорий у вас будет поле счетчикакаждый из них дает точное количество сообщений, которые занимает категория.