DataObject:get doesn't seem to well thought through and optimised.
DNA to answer your question DataObject::get is not (very) optimized and it does comes with the associated performance implications (try doing a DataObject::get('Page') on a ~20,000 page site!). You should use SS_Cache to cache any large sets from the front end if you want to keep tabs on performance.
Planning has been underway for how to replace the current accessing structure (http://open.silverstripe.org/wiki/development/NewDataMapper) Sam has already tried his hand at initial versions of the new functionality so it'll hopefully make its way into SilverStripe 3.0! Keep watching this space.
Another area a couple devs are investigating is how to reduce the number of queries SS makes. When you save a page in some parts of the CMS it can make a crazy amount of queries (one dev had ~700 per site publish) so its one area where the framework could use a bit of a cleanup.