I typically DM 2nd ed, so keep that in mind with regards to all the mechanics issues I raise.

First off, an encounter with a dragon is always an encounter where any of the characters involved could die, and I don't handwave deaths in those fights. I make this clear to the players at the start of any given campaign (I think every campaign should have at least 1 good dragon fight)

I divide dragons into smart, normal, and stupid categories and Gigantic, Huge and Large.

Smart dragons I give the XP of their effective casting level as both a wizard and a Cleric or to distribute as they will. Normal dragons get the XP of either a cleric or wizard, and stupid dragons get the normal abilities listed in the monsters manual. G dragons get D12 with Max hp H dragons get D10 with max hp and Large dragons get the normal D8 (also at max, it is still a dragon after all)

I double the number of claw attacks, give them a prehensile tail with it's own slap and constriction attacks, and I play them to their intelligence.

Finally, I remember that dragons are people to. As in they are as inteligent and have the depth of life experience of a person as opposed to simply being gigantic monsters. This means everything from sufficiently experienced dragons having a full slate of wizard and/or priest tricks (including enchantments etc...) to Dragons being open to conversation as often as not, and willing to accept your surrender (honestly or with plans to kill you anyway depending on the dragon)

Finally I almost never use a full on Dragon as a random encounter, and typically I make it clear when people are in Dragon territories. the biggest part to making sure dragons are special as opposed to just very powerful, is to use them when it' special.