A diferença está bem aqui na segunda linha da saída EXPLAIN:
-> Sort (cost=27.88..27.89 rows=7 width=198) (actual time=2984.688..2984.692 rows=28 loops=1)
Observe que o "tempo real" é praticamente todo o tempo da consulta. A classificação requer não apenas um monte de comparações (ou seja, o custo de classificar qualquer coisa), mas também gerenciamento de dados extra, o servidor precisa copiar alguns dados (linhas ou ponteiros para linhas) para um local temporário para que possam ser classificados sem perturbar mais nada .
Qualquer consulta levará mais tempo com a classificação, a menos que você tenha sorte e sua classificação corresponda à ordem no disco e o otimizador possa perceber que elas correspondem.