If you are using SQL server as your backend couldn't you utilize Soundex? I am unsure what you are trying to search for. I assume you are trying to create dynamic SQL as search input. If not I think there is SoundEx for LINQ.
EDIT: I stand corrected, it appears there is some linq to sql entity stuff that can be done for SoundEx.
However, MSDN does have a soundex example, which for the simple tests I ran this morning seems to do fine as far as what I tested.
http://msdn.microsoft.com/en-us/library/bb669073.aspx
The change I made was instead of .ToUpper(invariant) i used .ToUpperInvariant() and instead of passing (string word) i used an extension method (this string word)
Here is an example of what I ran
List<string> animals = new List<string>();
animals.Add("dogs");
animals.Add("dog");
animals.Add("cat");
animals.Add("rabbits");
animals.Add("doggie");
string dog = "dog";
var data = from animal in animals
where animal.SoundEx() == dog.SoundEx()
select animal;
data : dogs, dog, doggie
Now with SQL server, using the Contains/FreeText/ContainsTable etc and using SoundEx against a catalog (I am not familiar with the newer versions of SQL server - going back to SQLServer 2000 implementation I used), you could also rank your results.
Also if you have the ability to use sql server you may want to look into this option:
LINQ to SQL SOUNDEX - possible?
The concern with the Pluralization solution, you must be able to utilize .Net 4.
There is also the Levenshtein distance algorithm that may be useful.