Мне пришло в голову это:
function(insertNode, textNode, insertPoint) {
fr= document.createDocumentFragment();
fr.appendChild(document.createTextNode(textNode.nodeValue.substr(0, insertPoint)); // вставляем первую часть текстового узла
fr.appendChild(insertNode);// вставляем сам узел
fr.appendChild(document.createTextNode(textNode.nodeValue.substr( insertPoint)) //вставляем вторую часть.
textNode.parentNode.insertBefore(fr, textNode); // вставляем получившуюся хрень
textNode.parendNode.removeChild(textNode);//удаляем исходный узел. Получилось, что мы заменили исходный текст на два текста с элементом между ними.
Короче можно?