So if the question is about optimizing, there's mot too much you can do since these are system views you're querying.
However, from performance point of view but also to achieve simple query structure it would be best to stick solely with INFORMATION_SCHEMA views and to use all joining columns. Have a try with the following example. It should perform quite well.
SELECT s.CATALOG_NAME AS Database_Name,
s.SCHEMA_NAME AS Schema_Name,
st.TABLE_NAME AS Table_Name,
sc.COLUMN_NAME AS Column_Name,
sc.ORDINAL_POSITION,
sc.COLUMN_DEFAULT,
sc.DATA_TYPE,
sc.CHARACTER_MAXIMUM_LENGTH,
sc.NUMERIC_PRECISION,
sc.NUMERIC_PRECISION_RADIX,
sc.NUMERIC_SCALE,
sc.DATETIME_PRECISION
FROM INFORMATION_SCHEMA.SCHEMATA s
INNER JOIN INFORMATION_SCHEMA.TABLES st ON st.TABLE_SCHEMA = s.SCHEMA_NAME
AND st.TABLE_CATALOG = s.CATALOG_NAME
INNER JOIN INFORMATION_SCHEMA.COLUMNS sc ON sc.TABLE_SCHEMA = st.TABLE_SCHEMA
AND sc.TABLE_NAME = st.TABLE_NAME
AND sc.TABLE_CATALOG = st.TABLE_CATALOG
WHERE sc.DATA_TYPE <> 'bit'
AND LOWER(sc.COLUMN_NAME) LIKE '%email%'
ORDER BY s.CATALOG_NAME,
s.SCHEMA_NAME,
st.TABLE_NAME,
sc.COLUMN_NAME;