La respuesta está en esta parte del plan de ejecución:
Seq Scan ... (actual ... rows=2876756 ...)
...
Rows Removed by Filter: 141052
Dado que casi todas las filas se devuelven de todos modos, usar un escaneo secuencial y descartar las pocas filas que se filtran es la forma más eficiente de procesar la consulta.
Si quieres verificar eso, temporalmente
SET enable_seqscan = off;
para hacer que PostgreSQL evite un escaneo secuencial si es posible. Luego puede probar si la ejecución de la consulta es más rápida o no.