You can implement a BTree with nodes stored in file-backed memmaps. It's plenty fast for the usual business case.