С точки зрения производительности БД можно использовать первый метод, но таблицу tags_table кешировать в памяти и проводить соответствие в php, тут и БД придется с меньшими объемами данных работать, а также отдавать она будет вам меньший объем, что скажется на скорости работы.
если делаете на каком-либо фреймворке, например, Symfony, или хотя бы используете ORM типа Doctrine, решение очевидно: сначала используете дефолтные механизмы ORM — они дадут тривиальное решение, т.е. скорее всего, вариант 1. А оптимизацией занимаетесь по мере необходимости, глядя в профайлер
хотел написать полотнище, а потом подумал, что ключевые моменты для решения задачи вы не написали.
предполагаемая частота в каждую из таблиц
SELECT~UPDATE~DELETE~INSERT
какие они?