Может вам проще делать два запроса: в ограниченной области и, если всё плохо, по всей базе?
Кстати, сейчас в отображения сам объект сообщения больше не передаётся?
Стоп, так в функции case when ref is null and ... then ... end но где ветка else?
Кстати, а что скажете про https://github.com/postgrespro/rusmorph?
А почему допы нельзя унести в общий интерфейс?
Или это где-то учитывается?
А размеры индексов?