Вообще как вариант просто взять себе облачный сервер и настроить на нем мускул под свои нужды, включая увеличение длины строки для concat-функций.
Но можно просто в цикле для всех магазинов наджоинить таблицу с формированием полей по маске, чтобы на выходе обработать полученные данные и набить в конечный запрос.
А можно и вовсе составить запрос так, чтобы на каждый продукт получилось N-число записей, в каждой из которых будет ID магазина, кол-во и т.п. Типа так:
select
product_id, shop_id, count(*) as total
from products p
inner join shop_products sp on sp.product_id = p.id
inner join shops s on sp.shop_id = s
group by product_id, shop_id
И полученные данные уже обрабатываете в цикле, набивая конечный массив, так же как у нас TV-шки набиваются.