The best way to avoid hazards is to keep your design fully synchronous.
And introduce asynchronous signals only if you hardly need it. To avoid glitches in asynchronous part you could try to align paths of concurrent signals in such a way, that they will reach the hazardous gate at the same time. Or, you could try to change your design to avoid hazards on functional level. The excellent tutorial on this topic is available here:
**broken link removed**
But keep in mind that all this stuff will work ONLY if one signal could be changed at the same time. Otherwise, even the simple AND (OR) gate will produce the glitch when you change its inputs from 01 to 10.
Ace-X.