A resposta está nesta parte do plano de execução:
Seq Scan ... (actual ... rows=2876756 ...)
...
Rows Removed by Filter: 141052
Como quase todas as linhas são retornadas de qualquer maneira, usar uma varredura sequencial e descartar as poucas linhas filtradas é a maneira mais eficiente de processar a consulta.
Se você quiser verificar isso, temporariamente
SET enable_seqscan = off;
para fazer com que o PostgreSQL evite uma varredura sequencial, se possível. Então você pode testar se a execução da consulta fica mais rápida ou não.