1) I have no benchmark numbers for you, but randomly accessing a FlatBuffer vector should be about the same as randomly accessing a Java array, since you will be bound by cache/memory performance in either case.
2) Presumably Java's Map is some sort of binary tree, not an array, so performance will be entirely different. Maps are typically slower to access, but if your id's are very sparse, it can win because less memory is being accessed. Though I assume you're talking about a situation where the full range of ids are used, in which case a Map should always be slower.
3) Do note that the current FlatBuffer implementation is limited to store 2GB in a single FlatBuffer (it uses signed 32bit offsets). How it is loaded in memory is up to you: if Java has a way to load a byte[] / ByteBuffer similar to C's mmap(), then you could work with it without it all being loaded in memory.