答えは、実行計画のこの部分にあります。
Seq Scan ... (actual ... rows=2876756 ...)
...
Rows Removed by Filter: 141052
とにかくほとんどすべての行が返されるため、シーケンシャルスキャンを使用し、フィルターで除外されたいくつかの行を破棄することが、クエリを処理する最も効率的な方法です。
それを確認したい場合は、一時的に
SET enable_seqscan = off;
可能であれば、PostgreSQLが順次スキャンを回避するようにします。次に、クエリの実行が速くなるかどうかをテストできます。