Queries shall do the work but they can probably be optimised, e.g. proceeding with a loop. Currently working on those improvements
Tested on QGIS 2.18 and QGIS 3.4
I can suggest using a "Virtual Layer"
through Layer > Add Layer > Add/Edit Virtual Layer...
Option 1. For features in different layers
Let's assume we have the following layers "some_points"
and two polygon layers, "Layer_1"
(two features) and "Layer_2"
(three features) accordingly, see image below.

With the following query, it is possible to create a variable that is either TRUE
or FALSE
.
SELECT poi.*,
(CASE
WHEN poi.id IN
(SELECT poi.id
FROM "some_points" AS poi, "Layer_1" AS l1
WHERE st_intersects(poi.geometry, l1.geometry)
AND l1.id = 1)
THEN 'TRUE'
ELSE 'FALSE'
END) AS Layer1_1,
(CASE
WHEN poi.id IN
(SELECT poi.id
FROM "some_points" AS poi, "Layer_1" AS l1
WHERE st_intersects(poi.geometry, l1.geometry)
AND l1.id = 2)
THEN 'TRUE'
ELSE 'FALSE'
END) AS Layer1_2,
(CASE
WHEN poi.id IN
(SELECT poi.id
FROM "some_points" AS poi, "Layer_2" AS l2
WHERE st_intersects(poi.geometry, l2.geometry)
AND l2.id = 1)
THEN 'TRUE'
ELSE 'FALSE'
END) AS Layer2_1,
(CASE
WHEN poi.id IN
(SELECT poi.id
FROM "some_points" AS poi, "Layer_2" AS l2
WHERE st_intersects(poi.geometry, l2.geometry)
AND l2.id = 2)
THEN 'TRUE'
ELSE 'FALSE'
END) AS Layer2_2,
(CASE
WHEN poi.id IN
(SELECT poi.id
FROM "some_points" AS poi, "Layer_2" AS l2
WHERE st_intersects(poi.geometry, l2.geometry)
AND l2.id = 3)
THEN 'TRUE'
ELSE 'FALSE'
END) AS Layer2_3
FROM "some_points" AS poi
The output Virtual Layer with its Attribute table will look as follows.

Option 2. For features in one layer
Let's assume we have the following layers "some_points"
and "some_polygons"
, see image below.

With the following query, it is possible to create a variable that is either TRUE
or FALSE
.
SELECT poi.*,
(CASE
WHEN poi.id IN
(SELECT poi.id
FROM "some_points" AS poi, "some_polygons" AS pol
WHERE st_intersects(poi.geometry, pol.geometry)
AND pol.id = 1)
THEN 'TRUE'
ELSE 'FALSE'
END) AS Polygon1,
(CASE
WHEN poi.id IN
(SELECT poi.id
FROM "some_points" AS poi, "some_polygons" AS pol
WHERE st_intersects(poi.geometry, pol.geometry)
AND pol.id = 2)
THEN 'TRUE'
ELSE 'FALSE'
END) AS Polygon2,
(CASE
WHEN poi.id IN
(SELECT poi.id
FROM "some_points" AS poi, "some_polygons" AS pol
WHERE st_intersects(poi.geometry, pol.geometry)
AND pol.id = 3)
THEN 'TRUE'
ELSE 'FALSE'
END) AS Polygon3
FROM "some_points" AS poi
The output Virtual Layer with its Attribute table will look as follows.

long format
(pairs of point id and polygon id). To format it to your style (wide format
), you will need to work on spreadsheet (e.g. INDEX and MATCH in MS-Excel)... not sure QGIS has such reshaping capability. – Kazuhito Jun 12 at 20:21