Используйте выделенный поисковый движок — Elasticsearch/OpenSearch на инвертированном индексе — питаемый из вашей исходной БД через CDC, и шардируйте индекс для масштаба. Ваша основная база (Postgres/MySQL) не умеет ранжированный по релевантности текстовый поиск по сотням миллионов строк; LIKE '%term%' сканирует каждую строку. Поисковый движок инвертирует задачу.
Source DB ─▶ CDC (Debezium) ─▶ Kafka ─▶ Indexer ─▶ Elasticsearch/OpenSearch
(Postgres) (change stream) ├─ Shard 0 (inverted index) + replicas
├─ Shard 1
Query ─▶ Coordinator ─▶ scatter to shards ─▶ gather ─┴─ Shard N ── ranked by BM25
