Il rallentamento è probabilmente causato da operazioni matematiche e non dal recupero dei dati della tabella. Parte dei tuoi criteri non riguarda i campi dei record, ma il risultato dell'operazione matematica su altri record, quindi sta diventando un O(N).
Il motivo per cui Postgres non utilizza un indice e sceglie invece Seq scan è perché decide che la maggior parte dei record della tabella dovrà essere recuperata durante la query. Quando la maggior parte dei record nella tabella deve essere recuperata, gli indici potrebbero non apportare molti vantaggi.
Per velocizzare le cose dovresti considerare l'utilizzo di indici spaziali e la ricerca basata sulle vicinanze di PostGis o, in alternativa, Elasticsearch con Richiesta distanza geografica .