Why not just use NULL to mean "n/a"?
Else use TINYINT with a lookup table containing values 0, 1, and 2 (or perhaps 1, 2, and 3) and their meanings. Then you add a FK between the two tables to enforce that only those values get entered.
The last choice would be to go with a CHAR(1) column. This would be ok only if you also specified a binary Collation, such as Latin1_General_100_BIN2. The binary Collation will make it so that you don't lose performance over the other two options. Without the binary Collation, the string column will compare values against linguistic rules that take extra time yet have no meaning for this usage. You would also need an AFTER INSERT, UPDATE Trigger to first UPPER() this value for consistency, and then to enforce that all values are either Y, N, or A (for "n/a"). This is more readable than 0, 1, and 2 (via TINYINT) and just as efficient for searching, and also just 1 byte, BUT uses will need to remember to specify upper-case letters only, else they might not get the expected results.
There is no reason at all to use VARCHAR(3) and store the full values N/A / Yes / No, unless you just don't care about the system getting slower ;-).