Checking lines for a certain string
Some of your declared variables aren't used in your posted code - ws3, foundMatches, sDate.  Maybe they are used in code that you haven't included.  Even if you think your code may be too long to post in full, it would be helpful for us to be able to see everything between Sub and End Sub.

Your With ws2 End With is ineffective in so far as you continue to use ws2 explicitly in your code.  For example, lastRowWs2 = ws2.UsedRange.Rows.Count should be lastRowWs2 = .UsedRange.Rows.Count.

I'm not sure why you are looping through a single element array strSearch.  In fact, you could do away with strSearch and check by simply testing If ws1.Cells(i, searchColumnWs1).Value = "john" Then.

Looping through cells is inefficient.  So is copying entire rows.  I'm assuming that you actually want to paste into column C of lastRowWs2 + 1 which is why you insert new columns A:B.

While I haven't time tested filtering column J = "john" and copying/pasting the resulting list into .Cells(lasrRowWs2 + 1, 3) I'm confident that it would be much faster.

Avoid declaring variables as Variant because they have an overhead in terms of size and time taken for VBA to work out what sub-type they are.

.UsedRange.Rows.Count can return unexpected results if the last cell on the sheet is not where you think it is.  I've seen cases where Excel thinks the UsedRange extends down to row 1048576.