Самый эффективный способ - найти позицию, в которую вы хотите вставить элемент, прочитать все до конца, вставить новый элемент и скопировать остальные.
Проблема не в языке, а в том, как данные хранятся на носителе, где все просто длинная последовательность битов. Вы можете представить это как одну полоску бумаги с данными, написанными ручкой. Если вы хотите что-то вставить, вам придется отодвинуть все, что будет потом.
Конечно, если у вас много пустого пространства между блоками данных, вы можете вставить туда свои данные (что является идеей для Sparse Files), но это вряд ли экономит место.