ClassExtender will also extend modResource and as you suspect, using the extended object is *way* faster than TVs when it comes to searching and sorting.
http://bobsguides.com/classextender-class.html
The problem with using TVs is that the data you need is in three different tables -- The site_content table has the resource data, but the TV information is split between the TV table with the default values and the intersect table with the modTemplateVarResource data.
The worst issue is that for any TV that has an inherited or default value, the actual value is not in the modTemplateVarResource, but you have to check it to know that. Then you have to pull the TV object itself, usually in a separate query, and parse its value. Plus there's the question of whether you want the raw value or the rendered value (another step, done once for each TV that needs it).
Another big issue is sorting. There's no fast way to sort by TV values because they're split between two different tables and you have to check each one to see if you need to go to the second table. The sort has to be done after you have them all.
All of that goes away when you extend modResource. Using getObjectGraph() or getCollectionGraph(), you can get everything you need in a single query with a built-in sort. On one site I converted with ClassExtender, the time differences were pretty striking. I didn't measure them, but displays that took about 4 or 5 seconds were coming in at less than a second. That was from extending modUser. Extending modResource should yield a much more dramatic improvement because of the TV issues. YMMV.
I have couple of blog posts coming up on the advantages of extending modUser and modResource, but it may be a few weeks before they appear.
[ed. note: BobRay last edited this post 12 years, 4 months ago.]