La risposta sta in questa parte del piano di esecuzione:
Seq Scan ... (actual ... rows=2876756 ...)
...
Rows Removed by Filter: 141052
Poiché quasi tutte le righe vengono comunque restituite, l'utilizzo di una scansione sequenziale e l'eliminazione delle poche righe filtrate è il modo più efficiente per elaborare la query.
Se vuoi verificarlo, temporaneamente
SET enable_seqscan = off;
per fare in modo che PostgreSQL eviti una scansione sequenziale, se possibile. Quindi puoi verificare se l'esecuzione della query diventa più veloce o meno.