This seems crazy to me:
-[[!UltimateParent]],
[[!getPagesbyTerm?
&term_id=`[[!MainCategory?
&values=`[[!getPageTerms?
&outerTpl=``
&innerTpl=`AllCategoryIds`
&limit=`0`
]]`
]]`
&innerTpl=`AllOffersIds`
&limit=`0`
&outerTpl=``
]]`
You're running four separate snippets (six, if you count the two that are created inside the two pageTerms snippets), loading an autoloader, and making a number of separate queries to the DB just to get a list of IDs for getResources to retrieve (or not retrieve).
I'm not that familiar with Taxonomies, but it looks like both getPagesbyTerm and getPageTerms are both meant to display resources (since they have Tpls), but you're not using them for that, so they're kind of overkill for your use case.
I would rewrite the whole thing as a custom snippet (or at least the &resources part as mrhaw suggests) to merge the many snippets you're running into a single snippet using parts of the code from the various snippets being called.
If you're not up to that, using pdoResources (from the pdoTools package) would definitely speed things up.
If you can use the raw values of your TVs, you don't need &processTVs.
If only some of the TVs need to be processed, you can use &prepareTVList to list them.
If you're not using all the TVs from the pages, you can use &includeTVList to designate the ones you're using.
If you can hard-code the UltimateParent's returned value that will also speed things up.
As a last resort, you can go through the pages and hard-code the comma-separated list of IDs in the &resources property if that would work for you.