Does it support unpacking multiple files in a series? At least using temp or tempmem files, it should be able to unpack an entire solid archive in one successive run, stashing and emitting the files one at a time. This doesn't necessitate unpacking them all to memory at once, since the callback can free them when it's done processing them.
Otherwise, it looks like a large solid archive will slow down exponentially as more files are repeatedly unpacked to get to the next file it forwards to the caller of the index process.
virtual void archive_list( const char * path, const service_ptr_t< file > & p_reader, archive_callback & p_out, bool p_want_readers )