Hola de nuevo Swas:
No sé con qué base de datos trabajas, he estado haciendo pruebas con acces, que es cómodo y sencillo de manejar.
Teniendo una Tabla, Tabla1, donde estarán los datos tal y como los has especificado, creo una Consulta, Consulta1, con la siguiente sentencia SQL:
SELECT Tabla1.Id, Tabla1.IdPadre, Tabla1.Nombre,
IIf([IdPadre]=0,[Id],DLookUp("GranPadre","Consulta1","Id = " & [idPadre])) AS GranPadre
FROM Tabla1;
Con esto obtienes los resultados que dices, he probado hasta una anidación de 5 hijos
Como ves, se llama a sí misma, pero no se me ha ocurrido otra forma.
Espero te sirva de algo
Un saludo