All answers still load child categories in a loop, which, as a rule, is bad practice and causes the execution of many SQL queries, where one is enough.
Solution for a single request to execute:
Let $parentCategory be your main category, then this collection will load all the subcategories, at two levels below:
$subcategoryCollection = Mage::getModel('catalog/category') ->getCollection() ->addFieldToFilter('level', $parentCategory->getLevel() + 2) ->addFieldToFilter('path', ['like' => $parentCategory->getData('path') . '/%']);
The path field contains the category identifier with prefixes of all ancestor identifiers in the form 1/2/3 . A database is a column in catalog_category_entity that has an index, so a comparison like this has no performance issues.
source share