Le partitionnement de table n'aidera du tout .
Mais oui, il existe un bon moyen :Mettre à niveau à une version actuelle de Postgres. Il y a eu de nombreuses améliorations pour les index GiST, pour le module pg_trgm en particulier et pour le big data en général. Devrait être nettement plus rapide avec Postgres 10.
Votre recherche "plus proche voisin" semble correcte mais pour un petit LIMIT
utilisez plutôt cette requête équivalente :
SELECT address, similarity(address, '981 maun st') AS sml
FROM addresses
WHERE address % '981 maun st'
ORDER BY address <-> '981 maun st'
LIMIT 10;