Все верно. Но приоритеты я бы поменял. Эта задача относительно легко решается на WP Query. В малом объеме. Ваш п.2.
В крупных системах это все решается через подключение Algolia/Elastic/Sphinx.
И промежуточный вариант, он же наиболее хрупкий, сложный и геморный - это писать свои SQL запросы. Но если первый вариант начнет захлебываться, а на второй не хватит бюджета, то можно писать свой SQL.
Есть еще несколько вариантов с разной степенью изврата и сумасшествия, но там много разных но и если и их применение должно быть под чутким наблюдением WP-профессоров которых судя по характеру вопроса у вас нету :)