Thomas,
to correct the statement of another poster, I can tell you, that all data design in the core is made by developers with great insight and experience, especially the new user profiles, which needed to combine security, flexibility, maintainability and speed - aims that are struggling with each other.
Though normalized tables are usually preferable, there are issues, that might recommend another solution - due to speed (using redundant data) or flexibility (using a serialized storage format as UserDefinedTable and Profile Editor). And as far as I see, most of the overhead in DotNetNuke comes from the need, to fullfil many different needs, providing more and more options, that needs to be handled with additonal code - but as far as I read demands in these forums, most of these options are due to demand of the users, so they cannot be removed. Another source of additional code is code design with clearly separated layers, abstraction levels and provider integration. this leads into additional calls, but allows easier testing and encreases code quality.
As a conclusion: If you want a flexible, secure system for multi purposes, you well need to accept some performance loosings. If your main goal is performance, write an application, that is designed for a single special purposes.
My 2 cents.