So I looked into this problem a little more last night because it intrigued me. I didn't come up with a perfect solution but this could potentially work:
1. Use PlanTopology pt = new PlanTopology(level) to get the plan topology of the specified level
2. From there you can get the circuits you were talking about by doing circuits = pt.Circuits
3. Now you cannot specifically create spaces using those circuits because there is no method "NewSpace(circuit)" but you can create rooms that way. So I suggest using another transaction prior to your space creation one that creates new Rooms in the empty circuits (you can check if a circuit is empty by calling circuit.IsRoomLocated; you create a new room in an empty circuit via NewRoom(room, circuit)) and then add the location of that room via room.Location to some list.
4. Rollback the transaction where you created new rooms
5. Do your transaction to create new rooms using the locations that you just found
It's not perfect but you can at least see if you get increased performance from it. It's unfortunate that there is no new room functions that accepts a plan circuit as a parameter.