Mysql Query Optimization [Match Against]
MATCH is not the primary villain in the sluggishness; these are:


OR
Using LIKE / RLIKE
pagination via OFFSET
Most of the above prevent the use of any INDEX, hence the query must scan the entire table, thereby being slow for lots of reasons.


Some can be solved in SQL; most require changes to the specifications for the query.

Since the first thing the Optimizer will use is a FULLTEXT clause, I will focus on them.

        MATCH(`keywords`) AGAINST('word1*' IN BOOLEAN MODE)
     OR `title` LIKE '%word1%'


This can be simplified (approximately) by:

FULLTEXT(keywords, title)   -- add this

MATCH(`keywords`, `title`) AGAINST('word1*' IN BOOLEAN MODE)


That should make query2 much faster.

Query1 is pretty hopeless as a starting point.  Can we start with query2 instead?

SELECT ...
    FROM ( ...query2... ) AS x
    JOIN table_name AS t2  USING(id)
    WHERE ...
    HAVING ...
    ORDER BY ...  LIMIT ...   -- moved from query2


The idea is to


combine the tests as discussed above;
do the most filtering possible with the least work in the derived table (the subquery);
join back to the same table to pick up things left out of the subquery;
finish with the rest of the work.