En realidad lo que estás haciendo tu es una ensalada con la multiplicación cruzada de las 2 tablas.
Lamentablemente la solución a tu problema es una de las queries temerosas que nunca nadie quiere enfrentar por la inefisciencia que esta presenta, esta solución solo te la recomiendo si ambas tablas no son grandes, porque además las tablas están en bases de datos distintas lo que lo hace peor xD!.
bueno acá va
SELECT bd1.empresas1.id, bd1.empresas1.empresa
FROM bd1.empresas1, bd2.empresas2
WHERE bd2.empresas2.id!=bd1.empresas1.id ORDER BY bd1.empresas1.empresa
Si no estás haciendo las queries directamente en la base de datos puedes apoyarte con variables en una aplicación para almacenar el listado de ids de la empresas2 y no tener que hacer el select para comparar cada vez:
ejemplo en pseudo codigo
Código PSEUDO-CODIGO:
Ver originalvar BD_IDS = QUERY("SELECT ids FROM bd2.empresas");
IDS = UNIR_EN_STRING(BD_IDS); //esto para que quede en la forma 1,2,4,56,21,78,....... por ejemplo usando implode en PHP
//y despues haces la query
var IDS_DISTINTOS = QUERY("SELECT id,empresa FROM bd1.empresas WHERE id NOT IN (IDS)");
eso es más efisciente porque hace la query para traer los IDS de la empresa 2 una sola vez.
en el otro caso hace un SELECT por cada ID de la empresa 1.
Espero te sirva de ayuda ;)