En kolumn skall aldrig innehålla flera värden, precis som du säger.
Din andra version är mycket bättre rent prestandamässigt. Då skapar du ett index på variant-kolumnen.
OR kan ge prestandaproblem och ett bra tips om du bara gör OR på några få kolumner är att göra en UNION (eller UNION ALL, om du vet att du inte kommer få dubletter), exempelvis:
SELECT normeratNamn as namn FROM names WHERE normeratNamn = 'eriksson'
UNION ALL
SELECT variant as namn FROM names WHERE variant = 'eriksson'
Det kan vara så att den kan använda indexen bättre då, dessutom kan du skapa två separata index helt optimerade för en enda fråga.
Jag vet inte vilken databasmotor du jobbar med, men exempelvis sql-server har en funktion som heter soundex, exempelvis:
SELECT SOUNDEX('eriksson') -- returnerar E625
SELECT SOUNDEX('ericsson') -- returnerar E625
SELECT SOUNDEX('ersson') -- returnerar E625
SELECT SOUNDEX('svensson') -- returnerar S152
Som du ser så tycker soundex att de tre första strängarna är ganska lika. En annan funktion är difference som räknar antal skillnader i en sträng.
Läs mer om soundex och difference:
http://msdn.microsoft.com/en-us/library/aa259235(SQL.80).aspx
När det gäller din fråga om = är mycket snabbare än like, så måste jag svara. Det beror på.
Om du har en tabell och ställer din frågan mot en indexerad kolumn så kan exempelvis
SELECT name FROM names WHERE name LIKE 'eriks%' använda indexet och därmed bli väldigt snabb. I senare versioner av sql-server kan det faktiskt även hända att den kan använda indexen vid frågor som WHERE name LIKE '%eriks%', men det är inte lika vanligt.
