Hola.
Un post lleno de razón.
El Hash debería ser más rápido que B-Tree para valores únicos. Recuerda que el orden de las búsquedas en tablas Hash es constante en cambio en los Btree es M*log(N) donde M es el tamaño del nodo y N la cantidad de elementos.
Dejemos acá un paréntesis porque eso depende de la implementación
(en teoría) 
Saludos
Me acuerdo que hablamos de esto cuando nos enseñaron el funcionamiento de los árboles binarios de búsqueda (Estructuras de Datos y Algoritmos fue de largo mi asignatura favorita).
En realidad eso que marcas son valores teóricos, los valores para búsquedas en memoria.
Pero en una situación real, en una base de datos, los datos (y los índices y las tablas de hash) no están en memoria sino en un disco duro y dada la enorme diferencia de tiempo entre el acceso a memoria y el acceso a disco, lo importante son los accesos a disco que vas a necesitar para recuperar la información.
Y los BTrees que usan los servidores SQL no son árboles binarios (aunque se siguen llamando así porqué su funcionamiento es el mismo), sino que se han diseñado específicamente para reducir al máximo los acceso a disco. Son árboles de búsqueda pero tienen k hijos cada nodo, tantos como elementos caben en un clúster de disco (ya que igualmente tendrás que leer todo un cluster, pues al menos que esté lleno de valores a comparar). Por eso el número de acceso a discos en un BTree de una servidor SQL ya no es del orden Log(N), sino Log en base k de N (con lo que estamos hablando de valores muchísimo menores, ya que creo que k suele ser del orden de 100).
Dado que lo realmente importante son el número de acceso a disco que necesitarás, puesto que es donde realmente se pierde tiempo (y no en las operaciones en memoria), y como usualmente solo se necesitan un par de accesos a disco (según creo recordar que nos comentó el profesor), el acceso a un índice BTree+ también se puede considerar en cierta forma constante (fíjate como en esas bases de datos, en la práctica aunque una tabla tenga millones de registros, siempre vas a tardar más o menos los mismos milisegundos en localizar un registro por su clave primaria, que después de todo no deja de ser un BTree como cualquier otro índice).
http://en.wikipedia.org/wiki/B%2B_tree
Saludos.