Ideally you'd allocate in multiples of page size and make sure all your data structures neatly pack into 4K chunks.
One way to get both O(1) insertion and O(1) indexing from a linked list is to build a "dynamic" array on the first indexing operation as a cache. IIRC Firefox does this for its DOM node structures.