I agree with you in that I too am much more motivated towards design tasks than towards investigating and fixing someone else's bugs. It's enough of a motivation gap that I am noticeably more productive when I am working on design work.
I have narrowed that motivation gap somewhat by changing how I approach the "maintenance tasks" that I get assigned. Most of the maintenance work, as you mentioned, stems from poor design and/or shoddy implementation. Instead of finding the problem and hacking something together that seems to fix the previously-hacked-together code, I try to read and understand the faulty code and its surroundings and see if I can design a better solution. This engages the more-motivated design portion of my brain while still accomplishing the task I was assigned. Often times, this approach has uncovered additional problems that could turn into future bugs or has lead to performance/usability improvements due to my new implementation being planned and designed instead of simply cobbled together. This approach is more involved than simply implementing a quick-n-dirty bugfix, but (for me at least) changing the nature of the task at hand to something I enjoy more yields a significant enough productivity boost to warrant the extra work involved.
The downside is that sometimes project management can be strict about "don't alter working code" rules. If your manager is the type who would send you an angry email if you so much as changed the name of a variable in working code, then this approach will probably not work for you.
As an unintended benefit, doing something like this helps advertise your design and planning skills and might lead towards more design-oriented assignments coming your way.