Everything above is correct. One other thing that's really basic (and could even be inferred from a few statements above) is to let the really good cooks occasionally get something of their own on the menu. Obviously this isn't something you'd want to do with every cook you have - but if they're not skilled enough to come up with at least one excellent dish that would fit your restaurant well, then they're not really good enough to worry too much about holding onto.
Also, if they ask for a raise, don't laugh at them. The owner of the last restaurant did that to me because he thought it was intimidating, instead of just explaining to me that he couldn't afford it... 5 minutes later he was begging me to at least finish out the weekend.
Respect. Show them respect, give them a chance to feel like there's a part of them on the menu, and let them work to advance in the kitchen as other people fall away. But yeah, as it's been said before, any one cook who doesn't at least seriously entertain thoughts of leaving your place for a better deal/bigger role is at the very least unambitious. Turnover is just the nature of the beast.