Loading dictionary words into a trie
If you feel you need a comment like this:

    // ASCII a (97) + 26
    c = 123;


it means that the code is not clear. Consider

    c = 'a' + 26;


While we can figure out the significance of 26 (size of an English alphabet, right?) again it is better to be explicit. What you want is the first character beyond the [a-z] range, so:

    c = 'z' + 1;


Similarly, node-&gt;children[c-97] should be node-&gt;children[c-'a'].
The

    if (node-&gt;word == true) {
        return true;
    }

    return false;


is a long way to say

    return node-&gt;word;

Avoid globals. Make load return root (or NULL on failure), and pass root to check as a parameter.
Test what calloc returns.
root = calloc(1, sizeof(trie)); requires the knowledge that root is trie *, and therefore results a double maintenance. A preferred idiom is

root = calloc(1, sizeof(*root));

Branching factor of 27 adds a huge overhead. Most nodes will use just a few pointers, so most of the allocated memory is wasted. This in turn results in poor cache utilization, and may directly affect the performance. Consider allocating just as much as you need, and searching instead of indexing. It may or may not improve performance. Profile and compare.