Maybe this could be usefull for your needs:
SELECT date,
MAX(CASE WHEN name='fb' THEN value ELSE NULL END) AS fb,
MAX(CASE WHEN name='twtr' THEN value ELSE NULL END) AS twtr,
MAX(CASE WHEN name='FTSE100' THEN value ELSE NULL END) AS ftse100
FROM (SELECT date, index_name AS name, value FROM index_table
UNION
SELECT date, stock_name AS name, value FROM stock_table)
AS derivedtable
GROUP BY date