Here are some examples with full-text indexing that you can continue to explore on your own. Key takeaway is that you can create a full-text index on multiple columns
The version with FULLTEXTTABLE seems the most promising to me.
CREATE TABLE ProductsAndBrands (ix int NOT NULL,
Brand nvarchar(40) NOT NULL,
Product nvarchar(40) NOT NULL,
CONSTRAINT pk_ProductsAndBrands PRIMARY KEY (ix)
)
go
INSERT ProductsAndBrands(ix, Brand, Product)
VALUES(1, 'Samsung', 'Galaxy S21'),
(2, 'Samsung', 'QN95B Neo QLED 4K'),
(3, 'Volvo', 'P1800'),
(4, 'Volvo', 'Amazon')
go
CREATE FULLTEXT CATALOG cattie AS DEFAULT
go
CREATE FULLTEXT INDEX ON ProductsAndBrands(Brand, Product) KEY INDEX pk_ProductsAndBrands
go
WHILE EXISTS (SELECT * FROM sys.fulltext_indexes WHERE has_crawl_completed = 0)
WAITFOR DELAY '00:00:00.100'
go
SELECT * FROM ProductsAndBrands WHERE CONTAINS(*, '"Samsung Galaxy"')
SELECT * FROM ProductsAndBrands WHERE CONTAINS(*, '"Amazon Volvo"')
SELECT * FROM ProductsAndBrands WHERE CONTAINS(*, '"Samsung P1800"' )
SELECT * FROM ProductsAndBrands WHERE FREETEXT(*, '"Samsung Galaxy"')
SELECT * FROM ProductsAndBrands WHERE FREETEXT(*, '"Amazon Volvo"')
SELECT * FROM ProductsAndBrands WHERE FREETEXT(*, '"Samsung P1800"' )
SELECT PAB.Ix, PAB.Brand, PAB.Product, ft.RANK
FROM ProductsAndBrands PAB
JOIN FREETEXTTABLE(ProductsAndBrands, *, '"Samsung Galaxy"') ft ON ft."KEY" = PAB.ix
ORDER BY ft.RANK DESC
SELECT PAB.Ix, PAB.Brand, PAB.Product, ft.RANK
FROM ProductsAndBrands PAB
JOIN FREETEXTTABLE(ProductsAndBrands, *, '"Amazon Volvo"') ft ON ft."KEY" = PAB.ix
ORDER BY ft.RANK DESC
SELECT PAB.Ix, PAB.Brand, PAB.Product, ft.RANK
FROM ProductsAndBrands PAB
JOIN FREETEXTTABLE(ProductsAndBrands, *, '"Samsung P1800"') ft ON ft."KEY" = PAB.ix
ORDER BY ft.RANK DESC
go
DROP TABLE ProductsAndBrands
DROP FULLTEXT CATALOG cattie