There is a colleague who seriously knows his stuff, he is one of the brightest I've ever worked with, but he:
Maybe this possibly is one of those people who thinks "if I'm the only person who knows this, they can't get rid of me"?
Any suggestions on what to do?
BTW Management knows about the situation and are trying to change things.
In my opinion somebody doing such stupid things as you have described above can't be a star developer! To me it seems like he intentionally makes things more complicated as they are, so that nobody else than himself can maintain the code. This makes himself more important than he really is! Talk to him. He has to change it! If he doesn't, replace him with a real star-developer!
I promise you, in even half a year he will not know how his own code works! Fire him and you can save a lot of time and money.