The reason why your draw order is messed up is probably because your depth buffer is not being used. With the depth buffer enabled the order in which you draw your meshes makes no difference.
And since you've just stated that you were using a SpriteBatch component, it pretty much confirms that this is the problem:
Quoting that article:
Before you draw anything in 3D you will probably want to reset these states:
GraphicsDevice.BlendState = BlendState.Opaque;
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
Depending on your 3D content, you may also want to set:
GraphicsDevice.SamplerStates = SamplerState.LinearWrap;
In this case, the culprit is GraphicsDevice.DepthStencilState being set to None instead of Default.