Unconstrained 2d arrays are part of the VHDL 2008 spec, and modelsim 10+ should handle them fine. VHDL 2008 also allows you to declare types, functions, procedures etc in the generic region, but I doubt Quartus will bother supporting this any time soon. So you will need a package (which is usually the most sensible thing anyway). Any reason you dont want a package?
I would personally avoid std_logic_2d type because of what josyb has said - it can cause a lot of hassle and you need conversion functions to break your arrays out of there.