Hola Jonsson...
Realmente aunque tienen cosas en común son cosas muy diferentes.
El Hash es un tipo de dato de Harbour que sirve para contener datos que pueden ser accedidos por una clave, o sea es un par key, value optimizado para buscar un valor por su clave. Todo se mantiene en memoria y eso es algo a tener en cuenta, ya que si la información guarda es muy grande podríamos ocupar memoria
necesaria para otros menesteres. Queda patenten que el mantenimiento de los datos del hash lo controla el propio programador ya que no existe una relación entre base de datos (tablas, vistas u otras) y el mismo, y por tanto no hay una sincronización
El recordSet es una clase encargada de contener un conjunto de datos devueltos por una sentencia SQL y eso ya nos da la primera pista, existe una relación directa entre la base de datos y recordSet y por lo tanto el mantenimiento del mismo tendrá un efecto inmediato en la base de datos incluso hay algunos recordSet que se actualizan si otro usuario hace cambios en la base de de datos. Los datos contenidos dentro del recordSet internamente pueden estar guardado en un array, hash o en una gestión del propio cliente de la base de datos...
Entonces, amigo mío, como todo en la vida, tienes que decidir según tus necesidades. Como decía el filósofo francés Jean-Paul Sartre la vida te presenta un abanico de posibilidades y estamos obligados a elegir una con lo que nos quedará al frustración de no poder elegir las demás. Por suerte para tí, podrás cambiar si no te gusta la que elijas incluso entre otras opciones que no son las que propones,,,
Espero haber aclarado en algo tus inquietudes,