Maybe you can use one tricky thing instead. You just have to use some combination of the object coordinates and an integer seed value to initialize builder random stream. As result you wouldn’t need to store something global because each building will be loaded at the coordinates you specified (or relative to at least). When level is streamed out and then loaded in these coordinates will not be changed. Random number stored inside an object will stay too.
If you want to create something like biomes (a region with red brick buildings or so on) you can use volumes on persistant level (and check if origin hits inside this volumes) or you can fill some array or map inside gamemode to describe region info. Second method is better if you want to allocate that areas dynamically.