I don’t see much of an issue with the system you’ve proposed - Instance.new() isn’t too expensive, although if states are changing very quickly this might not be the best option. So l’ll give you a couple of things you could do:
You could just have a singular stringvalue that contains the state of the player, and that is updated whenever the state needs to be changed.
You could have a bunch of boolean values that can flipped on or off for every possible state (although if there’s a lot of possible states this could be tedious)
You could use a modulescript in the player with an array inside it that contains the states of the player’s character.
Note that these might not be the best options, as I’ve never really explored this area of ROBLOX programming in-depth. These are just what come to mind when thinking about your issue.