Я почти уверен, что предложенный вами метод станет более простым способом найти все производные типы. Родительские классы не хранят никакой информации о том, что их подклассы (это было бы глупо, если бы они это сделали), а это означает, что здесь не избежать поиска по всем типам.
Только рекомендации используйте метод Type.IsSubclassOf
вместо Type.IsAssignable
, чтобы проверить, является ли конкретный тип производным от другого. Тем не менее, возможно, есть причина, по которой вам нужно использовать Type.IsAssignable
(например, он работает с интерфейсами).