Przecież nie chodzi o szybkość parsowania zapytania tylko o to, czy silnik przy przeszukiwaniu tabeli wykorzystuje indeks czy nie, a to czy jest to wywoływane przez zapytanie czy poprzez procedure(np. w plpgqslu) to nie ma znaczenia. Dodatkowo procedury zrobione w plpgsqlu mają taką przypadłość, że jeśli dasz tam kilka updatów i/lub insertów dla kilku różnych tabel to silnik zakłada locka na wszystkie na wejściu do procki i zdejmuje dopiero po wyjściu. Nie wiem czemu, ale wygląda na to, że w taki dziwny sposób są one kompilowane.
A paginacje ostatecznie zrobiłem tak:
osobna tabela, w której będę zapisywal informacje o stronach (numer_strony, pierwszy_rekord, ostatni_rekord), ale ze względu na dodatkowe warunki to jest kiepskie rozwiązanie