You can parent the camera to a 3d null to move it around in x,y,z. (Or use an expression to map the nulls position to the camera position like you suggested.) You can also create another 3d null and pick whip up an expression to map the position of that to the camera poi. Then, you can animate both nulls independently.