I have read there is a common problem with performance the first time SPListItemCollection.Count or .GetDataTable() is used. I am consistently experiencing 30 second page load times when calling either of these members for the first time on a SPListItemCollection containing 3500 items.
I did, however, notice that System Account will load the exact same page in under 1 second. Knowing this, I wrapped the GetDataTable call in elevated permissions which did seem to shave off about 3 seconds but 27 sec page load time is still unusable.
Any idea why performance is bad for every user account except System?