1. Правильно думаете, только если Вы ищите такие пары среди ВСЕХ пользователей и ВСЕХ фильмов, то тут не обойдётся без полного сканирования всех 3 таблиц. Поможет кеширование, либо функциональные индексы, либо какие-то сводные таблицы управляемые триггерами или materialized view.
2. Active это bool или статус из списка? В любом случае тут нужен индекс по city_id и либо по полю active, либо частичный индекс where active = true. (надеюсь у Вас PostgreSQL)
3. Просто where с 2 условиями? Или есть подвох?
Запросы сложными тут быть не должны, но нужно предусмотреть правильные индексы чтобы это работало быстро.
Если нужна помощь именно с запросами, создайте
https://www.db-fiddle.com/ с примерами данных, хотя бы строк по 10, чтобы ясна было структура