Lo primero y segundo que comentas intentaba evitarlo, lo tercero es lo que hago actualmente y lo cuarto no tenia ni idea.
Hay SGDB que permiten que la sentencia DELETE se hacer como yo quiero, sin embargo, otros tales como SQL Server no lo permiten, desconozco Firebird, por eso pregunté.
Muchas gracias