I think that you should allocate the columns, for example:
DECLARE @tbl AS TABLE (id int identity(1,1) PRIMARY KEY, string varchar(100), LeftSideName varchar(max), RightSideName varchar(max))
INSERT INTO @tbl(string) VALUES
('JL & SONS Applications'),
('S&T Visions'),
('B & S Corporations'),
('A & C SHEET Aviation'),
('YOUNCE, Jane & Martin')
;
WITH CTE AS (
SELECT *, charindex('&', string) as Location, charindex(' ', string) as po
FROM @tbl
)
update CTE
set LeftSideName =
CASE WHEN Location <= 5 THEN null
WHEN po > 0 THEN SUBSTRING(string,0,Location)
ELSE string
END,
RightSideName =
CASE WHEN Location <= 5 THEN NULL
WHEN po > 0 THEN SUBSTRING(string,Location+1,LEN(string))
ELSE NULL
END
-- check the results
select * from @tbl