При этом telegram_id должен быть PRIMARY KEY или UNIQUE. IGNORE делает именно то, что нужно - игнорирует вставку, если она нарушает ограничения целостности.
Вполне нормально. Главное построить все нужные индексы. Базы данных специально разрабатывают под то, чтобы они такие запросы выполняли максимально эффективно.
Уменьшить количество таблиц в join можно с помощью денормализации или кэшированием части таблиц в памяти, но для учебного проекта нет никакого смысла заморачиваться.