"Existe alguma maneira de evitar o erro de tabela mutante sem usar uma tabela temporária para valores ou uma transação autônoma?"
tl;dr não.
O erro de tabela mutante é causado pela consulta da tabela que possui o gatilho ou tabelas que estão envolvidas em um relacionamento de chave estrangeira com a tabela proprietária (pelo menos em versões mais antigas do banco de dados, não tenho certeza se ele ainda é obtido).
Em um aplicativo projetado adequadamente, isso não deve ser necessário. É por isso que muitas pessoas consideram as tabelas mutantes como um indicador de modelagem de dados ruim. Por exemplo, a mutação é frequentemente associada à normalização insuficiente.
Parafraseando Jamie Zawinski:Algumas pessoas, quando confrontadas com uma exceção de tabela mutante, pensam "Eu sei, vou usar transações autônomas". Agora eles tem dois problemas.
Às vezes, o erro pode ser evitado simplesmente modificando os valores :NEW em um gatilho BEFORE INSERT OR UPDATE ou usando colunas virtuais. Mas você precisará postar mais detalhes para ver se eles se aplicam.
Mas a melhor solução é não precisar de nenhum outro tipo.