this is a very very common thing to happen, i'm suprised no one ever mentions it, maybe your cars are too new? ;p
i had it happen in an X5, and a 330ci, same stupid location that bmw designated for the switch, little spills, little puppies walking constantly across the console, wear and just age, pretty much will do that.
so here's fix, costs roughly $30 part, it's central locking/hazard switch, easiest thing to replace on your car just like changing a light bulb in your living room. once you have the part you'll realize how easy plug and play it is, just pop out the old one, disconnect wire, reconned new switch, place in, and you done.
here's another link just in case
http://forum.e46fanatics.com/showthread.php?t=353299