These comments apply to MySQL.
First of all, you cannot index TEXT. You can index VARCHAR up to some limit (usually 255). So, where practical, change TEXT to some reasonable length VARCHAR(n).
Let's look at your examples:
SELECT * FROM ng1 WHERE kd='abc' ORDER BY freq DESC
SELECT * FROM ng1 WHERE kd1='a' AND dt='1' ORDER BY freq DESC
SELECT * FROM ng1 WHERE kd2='ab' AND dt='1' AND dm='1' ORDER BY freq DESC
SELECT * FROM ng1 WHERE kd3='abc' AND dt='1' AND dm='1' ORDER BY freq DESC
Those four are essentially all the same: The WHERE has only '=' AND'd together. So start a composite index with those variables in any order. Since you finished the WHERE and did not have a GROUP BY, you can move on to the ORDER BY. Add freq to the end. The last one, for example, needs
INDEX(kd3, dt, dm, freq) or
INDEX(dm, dt, kd4, freq) or ...
This case is different because of the LIKE:
SELECT * FROM ng1 WHERE kd3='abc' AND word1 LIKE 'abc%' AND dt='1' AND dm='1' ORDER BY freq DESC
The LIKE without a leading wildcard is considered a "range", sort of like word1 >= 'abc' AND word1 < 'abd'. As with ORDER BY, a range will be the last column used in an index. So, the best you can do is:
INDEX(kd3, dt, dm, word1)
The first 3 can be in any order, but word1 must come after them. Adding freq will be of no use.
I discuss this and more in my Index Cookbook.
So, in your example, 5 different indexes for the 5 SELECTs is optimal. If, for whatever reason, you wanted to minimize the number of indexes, here are two approaches:
Sometimes the optimizer will be happy with skipping the WHERE and using an index for the ORDER BY. In that case INDEX(freq) would be "better than nothing" for all 5.
Your question suggested some "consolidating". I would suggest INDEX(dt, dm, kd3), in exactly that order, would handle the last 4 SELECTs "better than nothing". dt has to be first for #2. kd3 was added because it helps #4 and #5.
Other notes...
NULL/NOT NULL does not matter much.
PRIMARY KEY(word1) is "better than nothing", but only for #5. And, depending on cardinality, it might be used in preference over the one I suggested.
Write operations (INSERT, DELETE, and sometimes UPDATE) are slowed down by having lots of indexes. However, usually the benefit to the SELECTs outweighs this. So, as long as you don't "index every column", don't worry about the number of indexes.