Memory management for small allocations
I know it's kind of standard to do this in C land but you should spell things like this if((result = malloc(default_sizes[i]))) out as:

result = malloc(default_sizes[i]);
if (result != NULL)
{
}


Yes it's one line of code more but the intent is much more obvious at a first glance. As suggested in the comments you might want to invert the condition and continue. Reduces the level of nesting:

result = malloc(default_sizes[i]);
if (result == NULL) { continue; }


Technically it's better to write if (NULL == result) because if you accidentally write = instead of == then the compiler will throw an error instead of compiling buggy code - I just can't seem to get myself into that habit for some reason. Probably because it reads a bit clunkier that way (imho).
It's perfectly legal for a struct to contain a pointer to itself like this:

typedef struct memory_ {
    void           *mem_pool;   //starting address for this block
    struct memory_ *next;       //next node
    size_t         *position;   //current position
    size_t         *available;  //how much memory was allocated?
} memory_t;

The return type of increase_memory should be memory_t * because that's what it returns. You can also get rid of result in there and use new_block in its place.
In init_mem_pool you asked some questions on the return value. I guess you want it to indicate whether the initialization was successful or not - which is if root is NULL or not so you can just write this:

return root != NULL;