RE:hashing u ordenación posterior?
Sabes... hay libros enteros dedicados especialmente a analizar problemas como este, que no te asuste que sea complicado tal como la llevamos :P.
Es verdad, no hemos tocado el tema de la eliminación de registros. Los grandes motores de base de datos usan el método que tú señalas, agregan un campo de estado que, entre otras cosas, marca si el registro está activo o está "eliminado". Esto tiene varias ventajas, la primera es que no tienes que mover grandes cantidades de registros para "tapar el agujero" lo que redunda en el rendimiento general de la base de datos, la otra ventaja es la posibilidad de hacer un "rollback", es decir, si el usuario metió la pata, poder volver a traer los registros mostrados. Claro que a la larga, si el archivo está lleno de registros borrados las consultas se vuelven más lentas, para ello se usan algoritmos de "packeo", es decir, se ejecuta un pack de la base de datos que vuelca a un nuevo archivo físico solamente los registros que no están marcados como borrados y se elimina el anterior (también se le dice "purgar la base de datos").
Respecto al índice externo pues como te comenté en el mensaje anterior, la lógica sería que el archivo de índice contenga tres campos, el primero almacena el índice (o puntero) del registro físico en el archivo de datos, el segundo el índice (o puntero) al registro siguiente según el criterio de ordenación, y el tercero el índice (o puntero) al registro anterior según el criterio de ordenación.
Cuando llega un registro nuevo al archivo de datos lo agregas al final sin más trámites. Luego recorres usando el archivo de índice para saber en qué lugar de la ordenación debería ir el nuevo registro, cuando estableces el lugar, creas un nuevo registro al final del archivo de índice con los tres campos correspondientes y modificas los otros dos registros para que apunten a los registros apropiados anterior y siguiente.
El código fuente para hacer esto es larguísimo pero eso no quiere decir que sea ineficiente (eficientes son los métodos, no la cantidad de líneas de un código fuente).