Я бы использовал субконтроллеры или, что еще лучше, частичные запросы, чтобы выполнить то, что вы просите. На типичной странице я склонен не кэшировать всю страницу, а разбивать области на различные методы действий, которые вызываются посредством частичных запросов. Таким образом, у меня может быть выходное кэширование в каждой области с разным сроком действия. Это больше жизненных циклов страниц, но когда они кэшируются, они действительно не являются налогом на производительность. Также намного легче поддерживать и оптимизировать определенную область, если она начинает работать хуже.
По моему опыту, это также очень хорошо согласуется с шаблонами ajax, поскольку вы только каждый "получаете" свои данные одним методом действия.
Частичные запросы обсуждаются здесь и субконтроллеры здесь
Надеюсь, это поможет.