Gracias a ambos. Problemillas que he visto:
 
Chulosoy, probé el código y funciona, pero sólo llega a 2 niveles del árbol, yo quiero algo que lo haga sin limitaciones. 
JessicaTJ, no entiendo  

 , puedes poner un caso práctico, por básico que sea, donde aplicar esa sentencia y mostrar resultados? 
Se me ocurrió una forma para sacar todos los registros como quiero, pero tiene el problema de que no sé como formatearlo para que parezca un árbol, y me da que es un poco chapucero en general:  
 Código PHP:
    $idpadre=3 //el id del que quiero que salgan todos sus subempresas
                    
function buscar($idpadre){
    $sql=mysql_query("SELECT id,empresa,id_padre FROM x_arbol WHERE id_padre=".$idpadre);
    while($filas=mysql_fetch_array($sql)){
        echo $filas["id_padre"]."-".$filas["empresa"]."<br>";
        $idpadre=$filas["id"];
        buscar($idpadre);
                            
    }
}
buscar($idpadre); 
    
  Si tengo (ahora en vez de empresas, que es un poco confuso, uso de ejemplo un árbol geneálogico). 
Id:1 - (Padre) Juan
Id:2 - (Madre) Pepa
Id:3 - (Hijo) Luis - Id_padre:1
Id:4 - (Nieta) Jeny - Id_padre:3
Id:5 - (Nieta) Jesy - Id_padre:3
Id:6 - (Hija) Luisa - Id_padre:1
Id:7 - (Bisnieta) Loli - Id_padre:4 
Lo que sale con ese código es: 
1- Luis
3- Jeny
4- Loli
3- Jeny
1- Luisa 
Básicamente hace lo correcto, pero no sé como tabular los resultados por id_padre, pa que no queden tan en lista. 
Y si se os ocurre una forma de hacerlo menos chapucera, os lo agradecería muchísimo, saludos.  
EDITO: Si, está todo en la misma tabla, la estrctura es: 
id INT(11) Autonumerico PK
empresa VARCHAR (255)
id_padre INT (11) 
¿me recomendais hacerlo de otra forma?