Менее костыльное решение вы и сами знаете (или можете найти одним поисковым запросом), раз знаете название проблемы - в первом запросе получать идентификаторы, потом вторым запросом получать данные по where in.
Что же касается вашего текущего...
Я бы сказал, что оно приемлемо в некоторых ситуациях. Например, если построение информации о товарах - сложный процесс с кучей запросов к БД и/или каким-то сторонним сервисам, то имеет смысл их кешировать и тогда, действительно, будет N + 1. Но, как видите, это прям очень узкий кейс, котрого у вас, скорее всего, нет.