Like has been commented, you cannot refer to output column names in the WHERE clause. Only to input column names. You'd have to repeat the expression. See:
But there is more.
Strings are single-quoted: 'string'. See:
If your tables are not trivially small you'll want to improve performance with indexes. Your predicates have to be "sargable". For this, you have two basic options:
1. Expression index
CREATE INDEX ON info_table ((area_code || '-' || phone_triad || '-' || phone_quad));
SELECT area_code || '-' || phone_triad || '-' || phone_quad AS phone_number
     , first_name, last_name
FROM   info_table
WHERE  area_code || '-' || phone_triad || '-' || phone_quad IN (<list OF numbers>);
Note the expression area_code || '-' || phone_triad || '-' || phone_quad instead of your original concat() expression. Why? See:
2. Split up input
And work with basic indexes on one or more parts of the number:
WITH nr AS (
   SELECT phone_number
        , split_part(phone_number, '-', 1) AS area_code
        , split_part(phone_number, '-', 2) AS phone_triad
        , split_part(phone_number, '-', 3) AS phone_quad
   FROM  (
      VALUES 
        ('123-456-789')  -- your input here
      , ('223-456-789')
      ) input(phone_number)
   )
SELECT nr.phone_number, i.first_name, i.last_name
FROM   nr
JOIN   info_table i USING (area_code, phone_triad, phone_quad);
See:
To keep input numbers that are not found in the result, use LEFT JOIN instead of JOIN. Then null values are filled in for first_name & last_name - which is distinguishable from actual column values if at least one of your columns is defined NOT NULL.
Either way, you have to handle null values, empty strings and leading and trailing white space properly.