Eso que quieres hacer es un "Hack", es decir, "soluciona" tu problema pero no atacas la raiz del problema
La unica forma que yo conozca que haya bloqueos en la base de datos es alguna transaccion que este abierta y no se haya cerrado
Yo tambien utilizo SQL Server 2005 y jamas me paso algo asi. El unico caso que vi era un sistema que habia hecho un amigo en el cual manejaba los ciclos de apertura/cierre de transacciones mediante eventos controlados por el usuario, por ejemplo cuando cargaba una factura, al iniciar el form de carga de factura iniciaba una transaccion. Si este se iba y dejaba el sistema ahi, estaban todos bloqueados hasta que vuelva de tomar su cafe
Código Delphi
[-]
const
CONNECTION_STRING = 'Provider=SQLOLEDB.1;Persist Security Info=True; ' +
'Initial Catalog=%s;Data Source=local\SQLEXPRESS;' +
'Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;' +
'Use Encryption for Data=False;Tag with column collation when possible=False';
Esta es la connection string que utilizo en ADO para conectar a SQL Server 2005 desde Delphi 2010. Tambien funciona para SQL Server 2008 R2 sin problemas
No habra alguna transaccion explicita que se haya iniciado sin que te des cuenta?
Prueba a poner un valor menor al que tengas en la propiedades CommandTimeout y ConnectionTimeout de la ADOConnection