There are several data structures that allow O (1) to be used in Erlang tables: ETS, tuples, and binaries.
Now none of them will be really suitable for binary search. The ETS table supports the search from the very beginning, and otherwise the data is copied to your process when the result is returned, which is unlikely to be optimal for your use.
Tuples allow O (1) access with help element/2, but changing them has certain overhead (which is why the array module uses tuple trees).
Then you have binaries ( <<1,2,3,4,5>>) that allow something similar to pointer arithmetic, as in the following example:
1> Sorted = <<$a,$b,$c,$d,$e,$f,$g,$h>>.
<<"abcdefgh">>
2> <<_:3/binary, X:1/binary, _/binary>> = Sorted.
<<"abcdefgh">>
3> X.
<<"d">>
, , , .
, , list_to_tuple/1 element/2.
; gb_tree O (log N) .