Ok, I've found the problem. If the Indexer is called by cron.php it seems like the config variables for the directories "meta", "cache" and "locks" are not set. Therefore the script tries to write in the root-dir "/" and runs only if called by root. I dont know why and I wonder if I'm the only one encountering this issue, but I've found a workaround. I've added a few lines similar to the ones for the "pages" and "index" directories.
$cache = $base . 'docsearch/cache';
$meta = $base . 'docsearch/meta';
$locks = $base . 'docsearch/locks';
io_mkdir_p($cache);
io_mkdir_p($meta);
io_mkdir_p($locks);
$conf['cachedir'] = $cache;
$conf['metadir'] = $meta;
$conf['lockdir'] = $locks;
I don't know if it's better to use the standard directories "/data/cache|meta|locks/" instead of "/data/docsearch/cache|meta|locks", but it works for me.