SQL Conditional Join - remove duplication from Stored Procedure
Your code looks ok. Conditional join would lead you to parameter sniffing issue and you used one of two most popular solutions to avoid it.
Also you may want to use the second approach - dynamic sql, something like this:

DECLARE @sql NVARCHAR(max);

SET @sql = N'
WITH Catalog_Search_Results(FIM_NO,Rnk)
AS
(
    SELECT I.FIM_NO, 0
    FROM IMF AS I
    '
IF @Search IS NOT NULL
   SET @sql = CONCAT(@sql, 'INNER JOIN dbo.Catalog_ItemSearch(@Search) funcItemSearch ON I.FIM_NO = funcItemSearch.FIM_NO');

SET @sql = CONCAT(@sql, ')  
SELECT FIM_NO, Rnk
    FROM Catalog_Search_Results
    ORDER BY Rnk desc')                 

EXEC sp_executesql @sql, N'@Search varchar(100)', @Search