Hi Yan,
you will most likely not be able to load a tree of that size in RAM, not in Bio::Phylo and not in general in most phylogenetic programming toolkits in scripting languages (Perl/Python/R/Ruby/etc.).
That said, what you can do is load the tree into a simple relational database (e.g. SQLite) and access that. I wrote an extension to Bio::Phylo that works in that way, so you can have the same API but it operates on database records instead of a tree in memory. This will be somewhat slower, but much more scalable. I'm pretty optimistic it would work for the OTOL tree. It does for the big greengenes tree, for example.
$ make_megatree -infile <otol.newick> -dbfile <otol.db>
Where <otol.newick> is the OTOL tree file in newick format, and <otol.db> is the output file as a SQLite db. Subsequently, in your code, you can do:
use Megatree;
my $tree = Megatree->connect("otol.db");
The $tree will have all the methods of a normal Bio::Phylo tree, but it will do the traversals by lookups in the database. As database lookups are slower than pulling something out of RAM you will want to be efficient in the number of traversals you do.
For your second question: I'm not entirely sure what you're trying to accomplish in the end. You're able to mark a node as "collapsed", but this only means something for the tree drawer module (which will draw the node and all its descendants as a triangle). If this is not about visualization but about reporting something at certain nodes, you can make this work with the traversal methods, most likely, though I need a bit more information.
Hope this helps,
Rutger