What? No, neither of those. Every creature just needs a stored set of DIFFERENCES from the raws. Which for 99% of them will be an empty field. that only takes up one object's overhead. Which is trivial for the number of creatures in game at any moment. A kilobyte, total, I'd guess.
Every time you check for the existence of a flag, you check that creature's differences struct. If it doesn't have the entry you are looking for, then check the raws and go with whatever is there (or not). If it does have an entry (which would be either positive or negative), then go with that and don't bother to check the raws.
What's more, I would have assumed that such a system is already in place, since the game tracks things like lost limbs. If so, then it's not any additional wasted memory at all, cause those overheads are already invested in. If not, then whatever IS currently tracking lost limbs could be folded into this and still also help it pay for itself.
Edit: To the extent that 99% aren't empty... like if only 5% have empty differences lists, then that's fine too. Yes it takes up arbitrarily more memory, but only in proportion to how much your game and any mods you have are heavily using those tag changing or checking features. So you're very much getting your money's memory's worth, and it's not a problem.