Another option is to use sprite bank to save all the instances in a layout at the start of layout, then delete all the ones for the other rooms you're not using. Then when you switch rooms, load them all then delete all the ones you're not using again.
Also, you can help the fps by deactivating the solid behavior on objects that are far away.
Creating an array-based level editor is possible, but it's not exactly a smooth, easy process. What I'm doing currently is saving the instances of an room with sprite bank, then storing the JSON string (an array saved as a string) it makes for each room into the CSV plugin (an array with named columns and rows), then saving the JSON string of that to webstorage, then when the level is complete, I copy the JSON string to the clipboard, paste it to a word processor, do a find and replace on the " to "" so C2's expression editor will accept the JSON sting in an expression, and paste it into C2.
Yeah. Not exactly simple. Also keep in mind web browsers limit webstorage to 5 MB, so if your areas go above that, it messes up the whole process, and the only option I can think of is to use different CSV's for each level, and then I have to swap out which one I'm working on using the filesaver/filereader plugins, which can't load stuff automatically, so I have to use a file selection window each time I want to switch levels to edit them.