How fast and optimized is the generated code?
Well, it's as fast as you and Simulink make it... Think of it as regular C code. Basically, each Simulink block is transformed into nicely written code, but there's some overhead due to the block-based structure, data logging infrastructure, etc.
In fact, the performance depends very much on the way you design your model. I recently implemented a sequencer + 3-voice FM synthesizer, and by simply optimizing my Simulink model (mainly by using vector data types and single precision floats), I could cut the processing time by about 75%. Now the Windows task manager CPU usage oscillates between 0% and 1% when it runs...