I think if you have Bool’s which you switch on and off it deactivates anything before the Bool (so it does not compute), you can kind of see this when you use Material Instances with Bools. If you have a parameter before the Bool switching it to false means that material instance does not show that parameter.
I would go with the material Instance method, I think adding in extra meshes etc will get messy when you start doing additional things to the character, when you can just use one material instance to control all the effects.
I think the CPU vs GPU cost saving either way would be negligible, but with anything you should do some tests