My performance tuning has been of a result of seeing how many queries were being executed by using
Glimpse and not being too impressed by the results. The controllers were doing far too much for what I needed and as we have such specific use cases for product listing pages then a re-write was much easier.
A custom Route we use that catches all URLs
{*url} parses the URL into its relevant pieces and populates an object that containns the matched Category, Manufacturer, price ranges, sort options etc etc. This object is then passed to the controller which then calls a couple of service methods to retrieve further filtering information for that page (other brands, subcategories, gender, price ranges) and transforms then into relatively-small view models.
So the Action method of the controller itself is about 30 lines of code, with a couple of private methods for creating the view models. Any view logic is pushed into these view models; absolutely no logic in the views.
This takes about 6 database calls, all of which are heavily optimised to not fetch too much data and to basically push as much data set querying (distinct rows, row counts, grouping etc) to the database rather than doing it in code.