Recursive CTE to get Grandparent, parent, children
I believe this CTE can give you the desired result:
;WITH hier AS 
(

    SELECT DISTINCT h1.ParentPart, h1.Component, 
        h1.ParentPart AS GrandParent
    FROM #Hierarchy h1
        LEFT JOIN #Hierarchy h2 ON h1.ParentPart = h2.Component
    WHERE h2.Component IS NULL

    UNION ALL

    SELECT h1.ParentPart, h1.Component, h.GrandParent
    FROM #Hierarchy h1
        INNER JOIN hier h ON h.Component = h1.ParentPart 

)
SELECT GrandParent, Component 
FROM hier
ORDER BY GrandParent, Component;

Since you're only interested on the highest parent in each relationship chain, I used the trick of adding a third column on the anchor member containing what would be the great-great-grandparents. With that I can relate what value was the grandparent for each level of the chain no matter how many levels I descend.