Unless you need the complete document DOM in memory, a SAX (Sequential Access XML) parser will nearly always be faster. Whereas the DOM operates on the document as a whole, SAX parsers operate on each piece of the XML document sequentially. Even better would be StAX (Streaming API for XML) which is a newer API for pull-parsing of XML
Perl has several SAX modules but I do not see any StAX modules.
There is really no way to speed up a DOM parser except with a faster machine and more memory. As your file gets bigger and bigger, the DOM representation of your document will require more and more memory. That is why they came up with SAX and StAX.