De vertraging wordt waarschijnlijk veroorzaakt door wiskundige bewerkingen en niet door het ophalen van tabelgegevens. Een deel van uw criteria is niet tegen recordvelden, maar tegen de uitkomst van de wiskundige bewerking op andere records, dus het wordt een O(N).
De reden dat Postgres geen index gebruikt en in plaats daarvan Seq scan kiest, is omdat het besluit dat de meeste tabelrecords moeten worden opgehaald tijdens het opvragen. Wanneer de meeste records in de tabel moeten worden opgehaald, kunnen indexen niet veel opleveren.
Om de zaken te versnellen, kunt u overwegen om ruimtelijke indexen en op omgeving gebaseerde zoekopdrachten van PostGis te gebruiken of, als alternatief, Elasticsearch met Geo-afstandsquery .