В таких ситуациях надо делать так:
- Реализуем систему генерации нужного запроса с фильтрами
- На БД делаем возможность отслеживать запросы (время выполнения, частота использования и т.д.)
- Запускаем пользователей
- Собираем статистику по запросам
- Выявляем какие фильтры используются чаще всего
- Делаем индексы для этих выражений
Замечания:
- В postgres отслеживать запросы можно расширением pg_stat_statement. А вообще рекомендую главу 3
Мониторинг PostgreSQL
- Я сказал "индексы для выражений", т.к. скорее всего у тебя будут не простые поля, а именно выражения - Postgres позволяет по ним делать индекс
- Сколько времени собирать статистику - решай сам. например, как только все запросы начнут деградировать (не рекомендую до такого доводить)