SQL: Multiple Columns
I'm not sure on what the anomalies caused by the first design are called, but the below is the standard solution for that type of problem.  Or at least, it's the standard solution that I use.

Thea answer is to create another table to hold just phone numbers with a foreign key reference to the person table.  The only sticking point may be the PhoneTypeDescription field which should probably be yet another lookup table, depending on how many phone number types you think you might store.  But possible values could be Work, Cell, Home, Fax.  The use of the "IsPrimaryPhone" is also optional but probably warranted.

CREATE TABLE dbo.Person
    (
    PersonID INT IDENTITY(1,1) NOT NULL PRIMARY KEY
    , FirstName NVARCHAR(100) NOT NULL
    , LastName NVARCHAR(100) NOT NULL
    )

CREATE TABLE dbo.PhoneNumbers
    (
    PhoneNumberID INT IDENTITY(1,1) NOT NULL PRIMARY KEY
    , PersonID INT NOT NULL REFERENCES dbo.Person(PersonID)
    , PhoneTypeDescription NVARCHAR(10) NOT NULL
    , PHoneNumber NVARCHAR(20) NOT NULL
    , IsPrimaryPhone BIT NOT NULL DEFAULT 0
    )

CREATE NONCLUSTERED INDEX IDX_PhoneNumber_PersonID ON dbo.PhoneNumbers (PersonID, PhoneNumberID)