Just add a UITexture (ALT+SHIFT+T), choose your texture, and move it back in depth so that it's behind everything. No need to create any extra cameras.
Also when instantiating any NGUI object at run-time make sure to use NGUITools.AddChild, or NGUITools.AddWidget. It sets the layers properly.
Lastly, all widgets underneath a panel always assume the panel's layer. So if the panel is on the GUI layer, then the widgets will also adopt the GUI layer.