Como você já mencionou, é difícil prever quanto tempo uma consulta é executada (devido à própria consulta e seus parâmetros, devido à rede, devido à carga do servidor).
De qualquer forma, você deve mover as consultas SQL para QThreads. Isso permite que seu aplicativo atenda à GUI enquanto as consultas são executadas.
Também não tentaria resolver isso por timeouts. Você terá muitos problemas porque deixará de escolher os tempos limite corretos para cada consulta e cada situação. Em vez disso, forneça uma maneira de cancelar consultas por um botão ou uma caixa de diálogo para que o usuário possa decidir se é sensato continuar esperando ou não.