In addition to not showing them all at once, you can speed up the operation considerably by doing most of the work outside of the primary data source and only doing one add operation to the main source.
It will look something like this (in C#):
--------------------------------------------
IXMLDOMNode parent = oLocalDom.selectSingleNode("/CachedList/Products");
IXMLDOMNode workParent = parent.cloneNode(true);
/* ... Do work. Append to workParent... */
parent.parentNode.replaceChild(workParent,parent);
----------------------------------------
That sped things up considerably for me.
I also did a paging type thing you are suggesting. I inserted the first page and started a seperate thread to add the rest of the data in the background. But that takes quite a bit of fiddling to get working.
As for parsing through the nodelist by index value. You could always save the nSharedItem as a global variable and continue on from where you last stoped. If you don't want to do that you can use position() in XPATH and IXMLDOMNode.nextSibling.
So to get the 11th item you would use:
child = parent.selectSingleNode("child[10]");
and to get the next item in the list:
child = child.nextSibling;