If I read correctly, the EngineCylinder in tb2 is more complex than tb1's.
LIKE will check whether the first string contains the second one.
If you switch from your current expression to
... and (tb2.EngineCyliner LIKE '%' + tb1.EngineCylinder + '%')
That should work.
Or you can also use patindex which gives you the starting position of text pattern within another
... and PATINDEX('%' + tb1.EngineCylinder + '%', tb2.EngineCyliner) >= 1
EDIT
From my latest studies in MS SQL Server; Although this works it is inconvenient to use a predicate with a like or a function in a JOIN or the WHERE clause because the database engine can't benefit from indexes, and will have to execute that operation for every row in the table... Really bad for huge tables, and really bad if this is a production environment such as hundreds of users per second. MS SQL Server does have features to help this kind of search, for example FULL TEXT SEARCH (google for it).