I'll give you one other idea though it will cause you such headache, I'd stick with what you did.
If you keep track of the spawner in the entity (nbt) and the uuid in the tile (nbt) then:
- You can force the entity to communicate to the tile and see if still on list. If not, die.
- tile checks to see if its entities exist on some loop, and deletes if not found
- There will be times if the thing wanders enough that the tile is loaded and the entity is not or vice versa. If you write the tile entity code check right, the nbt should load and all should be fine in that direction. However, if the tile is loaded and the entity isn't, then the above stuff would have marked the entity dead and taken off the list.
Of course you could also wait a really long time to cull your list and instead respawn if the found alive entities on the list where still around, ect. There are a bunch of different ways to skin this, but they are all lacking in some way due to there being no way to make sure the entity chunk and the tile chunk are loaded.