Как хранить и сравнивать локации?
Во многих СУБД есть расширения для работы с пространственными и гео-данными.
Например в postgres - PostGIS.
Тебе нужно просто для каждого пользователя определить геолокацию как широту-долготу, а поиск в определённом радиусе уже будет реализован в postgis.

Это будет сильно быстрее чем "сравнить всех со всеми" благодаря специальным индексам
Имея геолокацию найти расстояние между двумя точками -  задача элементарная (вспоминаем школьную геометрию). Соответственно найти несколько точек, у который расстояния то-ли минимальное, то-ли не превышает заданную величину (те-же 50 км.) также особого труда не представляет.  Хотя что делать, если населенные пункты А и В находятся в 50км, но между ними курсирует скоростной поезд, а пункты А и С -  в трех километрах, но через высокогорный перевал или реку -  с объездом в 100 км (да, бывает и так) ? В общем, мне кажется поиск по геолокации -  не лучший способ решения проблемы.  

А вот искать "по области"  (или по населенному пункту) - уже перспективнее. Наиболее просто способ -    "в лоб" выяснять у пользователя из какой он области. И тогда проблем нет. Но если исходить из геолокации -  то проблема серьезная. Надо где-то искать соответствующую базу (по сути границ областей), потом решать задачу, в какую область угодила точка.... В общем весьма муторно. 
Можно, например, спрашивать город, от которого по имеющейся открытой информации переходить к области.  Или по области находить города - в том числе близлежайшие - такая карта расстояний имеется (правда, не заю, в свободном-ли доступе). На худой конец искать API Google-maps и тянуть информацию из него.

В общем, лучше для пет-проекта пока реализовать более простой подход (с явным указанием локации -  населенного пункта), а потом, если сохраниться желание над проектом работать и его развивать -  усложнять и вводить поиск уже по геолокации.