Maybe something like this could perform better, based on the following article:
http://www.sqlservercentral.com/articles/T-SQL/91724/
CREATE FUNCTION [dbo].[DateFormattedByMask]
(
@InputDate DATETIME,
@Mask NVARCHAR(80)
)
RETURNS TABLE
AS
RETURN
(
SELECT Mask = REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(@Mask,'hh', RIGHT('0'+DATENAME(hh,@InputDate),2))
,'mi', RIGHT('0'+DATENAME(mi,@InputDate),2))
,'ss', RIGHT('0'+DATENAME(ss,@InputDate),2))
,'YYYY',DATENAME(YEAR,@InputDate))
,'YY',RIGHT(DATENAME(YEAR,@InputDate),2))
,'MMMM', DATENAME(MONTH,@InputDate))
,'MMM', LEFT(DATENAME(MONTH,@InputDate),3))
,'MM', RIGHT('0'+CAST(MONTH(@InputDate) AS NVARCHAR(2)),2))
,'DDDD', DATENAME(dw,@InputDate))
,'DDD', LEFT(DATENAME(dw,@InputDate),3))
,'DD', RIGHT('0'+DATENAME(DAY,@InputDate),2))
)
GO
EDIT: format and minute code issues.