1. насчет регистра: странно, т.к. у меня он регистронезависимый. Найдите в файле search.cgi строки (подпрограмма sub search):
# Save the reg expressions to avoid rebuilding.
    $or_match   = $bool ne \'and\';  
    if ($or_match) {
        for (0 .. $#{$search_terms}) {
            next if (length ${$search_terms}[$_] < 2);  # Skip single letter words.
            $tmp .= "m/\\Q${$search_terms}[$_]\\E/io ||";
        }
    }
    else {
        for (0 .. $#{$search_terms}) {
            next if (length ${$search_terms}[$_] < 2);  # Skip single letter words.     
            $tmp .= "m/\\Q${$search_terms}[$_]\\E/io &&";
        }
    }
Особое внимание стоит обратить на: 
$tmp .= "m/\\Q${$search_terms}[$_]\\E/io
"i" в конце выражения означает именно регистронезависимость. Может у Вас этого нет? 
Насчет второго: почти никак. Можно конечно "отрубать" пару символов в конце каждого слова запроса - типа ищем по корню 

 но отрубание - метод топорный, кривой и неэфективный. Нормально оптимизировать поиск не удастся никак - самое лучшее, что можно посоветовать - это добавить дополнительное поле с ключевыми словами или с описанием.
Возможно стоит посмотреть моды на сайте разработчика - там есть несколько модификаций на тему поиска Links2