So looking at your examples, you need a few different things.
First you’ll want to make a parent for all of them that are characters. Make the parent class of “Character” actor, and create this custom class with anything the children will need.
You’ll make any that are CHARACTERS, which are humanoids, all use this same parent Character, not ThirdPersonCharacter.
Next, you’ll want to do the same but with pawn instead of character.
You’ll make any that are not characters but animals or rocks or whatever, make those children of this class.
So it will look like
Character
NPC_Character
NPC_Character_A
NPC_Character_B
NPC_Character_C
Pawn
NPC_Pawn
NPC_Pawn_Rabbit
NPC_Pawn_Bird
NPC_Pawn_BigEyeball
There is a way around this with just using actor as their overall parent and creating custom character and pawn classes based on that, but trust me when I say you’ll spend much more time creating a custom pawn class and character class based on that actor when it’s usually a matter of adjusting variables.
Now, for another topic, you say 70k actors. Is this your entire world? Or the player’s immediate vicinity? Because those two things are very different optimization wise and you may simply need to have the AI controllers be inactive until the player comes near enough to interact with them. Because why would they need to be active if the player is 1 km away? That sort of thing. I’m thinking the reason the performance went up when you switched them to actors is there is not any AI controller on actors.
I know this is a lot, I myself kept getting turned around in my thoughts as I was writing it but I tried to be as clear as possible, let me know if I can clarify anything for you!