Maybe it's just me but it seems like overcomplicating the matter. As Gail suggested just use a normal VARCHAR column which can be updated any time. This logic can be applied at the application layer or a stored procedure which is updating the table. A one time update can be done to existing rows if the column was added after the fact.
CREATE TABLE TestTable (ID INT IDENTITY, FirstName VARCHAR(50), LastName VARCHAR(50), NickName VARCHAR(101))
GO
CREATE PROCEDURE InsertTest @FirstName VARCHAR(50), @LastName VARCHAR(50), @NickName VARCHAR(101) = NULL AS
IF @NickName IS NULL
INSERT INTO dbo.TestTable( FirstName, LastName, NickName )
VALUES ( @FirstName, @LastName, CONCAT(@LastName,' ',@FirstName))
ELSE
INSERT INTO dbo.TestTable( FirstName, LastName, NickName )
VALUES ( @FirstName, @LastName, @NickName)
GO
dbo.InsertTest @FirstName = 'Joe', @LastName = 'Someone'
GO
dbo.InsertTest @FirstName = 'Jane', @LastName = 'Doe', @NickName = 'Awesome'
SELECT * FROM dbo.TestTable
DROP TABLE dbo.TestTable
DROP PROCEDURE dbo.InsertTest