Why is search cron so slow?
One quirk that I have run into is that everything that happens during a node_load and node_view happens during indexing.  Take a look at _node_index_node start tracing backwards to see the process.

This means that any expensive operations that happen when a page gets viewed also happen when a page gets indexed.

For example, I had a site a while ago that queried an external webservice during node_load and I also noticed that search indexing was slow.  In my instance, the external webservice calls were adding up and not needed during indexing.  I solved it by doing something like

function foo_node_load ($nodes, $types)
{
  if (arg(0) != "node") return;

  // rest of hook
}


So, I would take a look at what else could be going on in your hooks and preprocess/process functions that could be slowing the process.