I actually have one more thing to add to this discussion -- OO programming also can increase code size tremendously, in return for adding flexibility, stability and code reusability.
Tweaking a program for optimal speed always means doing serious damage to your OO architecture. Before about 2 or 3 years ago, good OO design was typically non-existent. The new languages, Java and C#, are forcing developers to begin to understand and use solid OO design. Which will be slightly slower code than pure optimized code. But the benefits are thru the roof!
So I would say that, in and of itself, code size isn't a very useful way to measure software quality.
Features, ease of use, stability, flexibility, scalability, solid componentize architecture . . . these are the 'measurements' of software quality.
If you just apply these to MS software, I think you find the *real* proof that their software is low quality.
But just being 'big' doesn't necessarily mean 'bad'. In good software, 'bigger' should mean more functional.