Do covering indexes in PostgreSQL help JOIN columns?
Will the index be used as a covering index to help the JOIN in the above query?

It depends. Postgres has &quot;index-only&quot; scans as index access method, there are no &quot;covering indexes&quot; per se - up to Postgres 10.
Starting with Postgres 11 true covering indexes with INCLUDE columns are available. Blog entry by Michael Paquier introducing the feature:

https://paquier.xyz/postgresql-2/postgres-11-covering-indexes/

Related answer with code example:

Does a query with a primary key and foreign keys run faster than a query with just primary keys?

That said, the index CREATE INDEX ON table2 (t2c1, t1); makes perfect sense for the query you demonstrate. It can be used for an index-only scan if additional preconditions are met, or it can be used in a bitmap index scan or a plain index scan. Related:

Index usage on a temporary table
Is a composite index also good for queries on the first field?

JOIN conditions and WHERE conditions are almost completely equivalent in Postgres. They certainly can use indexes in the same way. You can rewrite your query:
SELECT table1.t1c1
FROM   table1
JOIN   table2 ON table2.t1 = table1.id
WHERE  table2.t2c1 = 42;

With this equivalent:
SELECT table1.t1c1
FROM   table1 CROSS JOIN table2
WHERE  table2.t1 = table1.id
AND    table2.t2c1 = 42;

The first form is obviously preferable, though. Easier to read.
Why &quot;almost&quot; equivalent? (Makes no difference for the simple query at hand.)

Why does this implicit join get planned differently than an explicit join?

Related:

Are implicit joins as efficient as explicit joins in Postgres?
What does [FROM x, y] mean in Postgres?