All the features you want are easily scriptable. Your code works fine for what you want, although you can use $asctime to retrieve the day and month instead of just $timestamp.
Also, your method of determining whether or not the active window is a channel or not is a little drawn-out.

For example.. your code had this:
Code:
on *:text:*:?:{  
  if (($left($active,1)==#)&&(%mlog==1)) {   
    if (!$query($nick)) {      
      write $logdir $+ $mklogfn($nick) $timestamp < $+ $nick $+ > $1-    
    }  
  }
}


An easier way would be..
Code:
on *:text:*:*: {
  if (($active ischan)&&(%mlog==1) {
    if (!$query($nick)) {      
      write $logdir $+ $mklogfn($nick) $asctime(hh:nn:ss:tt mm dd yyyy) < $+ $nick $+ > $1-    
    }  
  }
}


As for the log search, I have coded a little alias to do that. I don't have it with me here, otherwise I would post it. It's fairly fast as it works using /filter, and the more search parameters you use, the faster it gets because there's less to look through. Anyways, you have some good suggestions. Enjoy!