Si trabajas con Firebird 2.1 o posterior puedes utlizar la clausula RETURNING.
Código SQL
[-]Insert into mi_tabla (nombre, apellido) values (:new_nombre, :new_apellido) returning id
No es recomendable que tú asignes el valor del campo ID, o de cualquier otro campo que obtiene su valor del próximo estado del generador. Para asignar los valores en este tipo de campos, es mejor dejar el código de asignación en un stored procedure -ejecutado en un AFTER INSERT-. A cómo tú lo has dicho, nunca sabes si un usuario va a ingresar un registro al mismo tiempo que lo haga otro usuario.
Saludos,
Chris