For your specific example, the A(1,:,:) and A(2,:,:) data blocks are contiguous memory and, more importantly, were both allocated with a single malloc (or similar) call in the background. They cannot be legally separated into separate real and imaginary parts of another variable. You will be required to copy the data as you (and Wayne King) are doing.
Regarding mex routines, there are ways to do stuff like this. I have code (as yet unpublished to the FEX) that can pretty much do what you are asking, but it involves manipulating the mxArray structure behind the scenes (i.e., not using the official API functions). Also, for your particular case, one would have to keep a shared data copy of the new complex variable locked up in the mex routine to prevent MATLAB from trying to free the imaginary part (if that ever happened MATLAB would crash). To clear it you would have to manually reverse the process that you did to create it. So it gets to be very tricky to manage, but technically it can be done. Can you redo the part of your code that creates A and instead put the A(1,:,:) and A(2,:,:) parts into separate variables from the outset? If so, then what you are asking becomes much easier to do in a mex routine (but still requires unofficial behind the scenes techniques).