Manually create array of subclasses on init, even engine does that:
So it loks like this:
for(TObjectIterator<UClass> It; It; ++It)
{
if(It->IsChildOf(USomeAwesomeClass::StaticClass()) && !It->HasAnyClassFlags(CLASS_Abstract))
{
Subclasses.Add(*It);
}
}