Проблема вот в чем.
Сейчас у вас при выборе конкретной категории товаров в блоке категорий отображаются категории верхнего уровня и содержание выбранной категории (то есть ее подкатегорий). Для получения этой информации из БД надо отправить в базу 2 запроса, первый для получения данных о верхнему уровне, воторой - для получения данных о подкатегориях выбранной категории. Чтобы построить стандартное раскрывающееся меню на основе JS надо загрузить все дерево подкатегорий, а это значит что надо запустить количество запросов по всем категориям первого потом по каждой подкатегории второго уровня и так далее. Количество запросов в этом случае растет как цепная реакция. Так на вашем сайте если на первом уровне только 2 позиции и для раскрытия каждой из ни нужно по одному запросу, то на втором уровне у вас уже десятки позиций в каждой и при этом есть третий уровень, а значить судя по тому что вы написали к базу надо будет отправить уже порядка 20 запросов. То есть скорость формирования информации для блока категорий уже при этой товарной номенклатуре падает в 10 раз. Хотя страницы и кешируются, но кэш не безразмерен, и если частота обращений ко всем страницам будет примерно одинаковой то довольно много пользователей будут сталкиваться с необходимость ожидания загрузки страниц. А дерево категорий может добавить к этому времени 2-3 секунды, а это чувствительно. Это типичная проблема во всех магазинах. Может просто отформатировать с помощью CSS отступ для содержания выбранной категории и все? Дешево и эффективно.
Вот пример сайта с большим деревом категорий (правда на Престашоп), с которым мне довелось работать
http://profkosmetika.su/
. В конечном итоге владелец отказался от такой идеи (см. новый сайт jojoba.ru) хотя сайт все равно медленный, но это уже по другим причинам. А предлагаемый мной вариант вот parisdog.ru (тоже на Престе, который я закончил примерно месяц назад) Обратите внимание на блок категорий.