I’m in a bit of a similar conundrum myself, though I primarily use BP and not C++.
First things first, it’s becoming obvious to me that some form of abstraction is necessary when it comes to activating things. I haven’t seen any general functionality that will shut off tick, collision, and rendering all in one go, so that might be something you have to implement yourself.
There is an activation API in UActorComponent as shown here.
“Should be overriden by native child classes”, it says. But it’s not exposed at all to BP and I don’t know why lol.
For my own project, I ended up implementing a generic activation component to handle this. I have various level scripts that need to be activated in a universal manner and I hate dealing with having to cast to specific classes, etc. BP Interfaces seem to have their own limitations and don’t solve the headaches I’ve had to deal with when communicating between actors and/or components. For my project, I don’t always need to mess with tick/collision/rendering, so I need that level of abstraction to activation. (i.e. Some of my actors have their tick functionality split up into different components for performance reasons, some don’t need to disable rendering/collision when they’re inactive, etc.) A similar approach could help you deal with this quickly, however, and at a much simpler scale than my use case.
So to answer your question: As far as I know, there is no simple answer. However, if you implement something smart that works for you, you can make the process simple for yourself.