Hi,
I'm afraid that is only viable on a 3D level where you can place all objects by means of a transformation matrix on the GPU with a low cost.

You might use direct drawing functions and emulate the role of a camera of the engine by checking the bounds of the objects against the bounds of a 2d camera and only draw visible objects. Large levels might need a system that adopts the role of the BSP tree, where the objects are grouped by related areas and the view drawing process only checks the bounds of the objects of the current area and its neighbors instead of the full list of objects. I would avoid using panels. I am afraid the engine checks its visibility each frame. For the case, I think it is better to use structs that are managed by you only. The fastest bounds checks are parallel to screen axes.

Code
for each(obj : currentArea.objList)
   if(intersectBounds(obj, view))
      draw(obj, obj.pos - view.pos + screen_size / 2);
for each(n : currentArea.neighborAreas)
   for each(obj : n.objList)
      if(intersectBounds(obj, view))
         draw(obj, obj.pos - view.pos + screen_size / 2);