Bom dia amigos!
O erro ocorre porque o campo não existe no SELECT, isso já sabemos.
Resolvi esse problema fazendo o campo "existir", porém utilizando um JOIN para trazer os dados alguns componentes não respeitam a configuração do campo e tentar gravar na tabela auxiliar, causando um outro erro que claro não queremos.
Então o que fiz foi trazer os dados usando um sub SELECT, exemplo:
SELECT
FE.FornEmpresa_fornecedor,
FE.FornEmpresa_empresa,
(SELECT Emp_ds from Empresa EM WHERE EM.Emp_cd = FE.FornEmpresa_empresa) as [Emp_ds]
FROM Forn_Empresa FE
Dessa forma o componente ADOQUERY não tentar gravar dados em "Emp_ds", traz os dados e é possível ordenação porque agora ele existe no SELECT.
No FIELD, ele continua sendo do tipo LOOKUP e todo configurado para trazer os dados da outra tabela, normalmente, senão ao inserir registro ele não preenche a descrição sem reabrir o ADOQUERY.
Importante: No FIELD, na propriedade "ProviderFlags", marque apenas a opção "pfHidden", o deixei como ReadOnly para que não seja possível altera-lo e assim evitar que tente ser gravado.
Testem aí e me dêem feedback por favor.
Abraços!!