Well with my mage I use the Thunderbolt spell and Greater Ward for protection. Greater Ward completely blocks all damage from the dragon breath attacks, at least it does for me on Adept (might not work on higher difficulties, I haven't tried it). In between breath attacks I dual-cast Lightning Bolt, then when I'm low on magicka I use the rest of it to summon a Dremora Lord to distract the dragon while my magicka recharges. While I'm blocking with the Greater Ward, I shoot Thunderbolt with the other hand. Those tactics -- combining Greater Ward and Thunderbolt, then dual-casting Lightning Bolt when the dragon isn't "breathing", then summoning the dremora lord as a distraction -- works very well for me.
Magicka isn't much of an issue for me since I have a huge magicka pool to begin with, and I have the Atronach perk (Absorb 30% of all magical effects used on me), and all three Magic Resistance Alteration perks (30% Magic resistance), + 25% magic resistance from being a Breton, and the Ward Absorb perk that lets my Ward spells absorb magic. So I never seem to run out of magic too fast...
At earlier levels that was a different story. At early levels with my mage, it was basically a matter of ducking behind cover when the dragon breathed, then spamming dual-casted lightning bolt until I ran out of magic, then running around like crazy trying not to die while my magic regenerated. Not very epic at those levels, lol.

But now it's much easier and more fun.