You're right - it's returning the first row when there is no match... not much you can do about that, it's normal INDEX behavior.
You can use this longer version; it's uglier, but still not an array.
=IF(C3="","",IFERROR(INDEX('Master List'!$B$1:$B$2000, IF(0=SUMPRODUCT(ROW(INDIRECT("1:2000")), 1-ISERROR(FIND(C3, 'Master List'!$A$1:$A$2000))),NA(),SUMPRODUCT(ROW(INDIRECT("1:2000")), 1-ISERROR(FIND(C3, 'Master List'!$A$1:$A$2000))))),"ADD TO MASTER"))
Why don't you want an array?