To access them in the way you like:
    #include <stdio.h>
    typedef struct{
        char name_cake[10];
        char code_cake[10];
        int stock_cake;
        char about_cake[10];
        char cake_taste[10];
    }order;
    typedef struct{
        char name_cake[10];
        char code_cake[10];
        int stock_cake;
        char about_cake[10];
        char cake_taste[10];
    }cake;
    typedef struct {
        union {
            order the_order;
            cake the_cake;
        }; // anonymous union
    }information;
    int main() {
        order an_order = {"cakename", "code", 0, "about", "taste"};
        information info = *((information*)&an_order);
        printf("From order: %s\n", info.the_order.name_cake);
        printf("From cake: %s\n", info.the_cake.name_cake);
        return 0;
    }
$ gcc -Wall ordercake.c
$ ./a.out              
From order: cakename
From cake: cakename
$ 
In general you want to do object-oriented programming in C. Therefore, take a look at: How can I simulate OO-style polymorphism in C? (There is even a free book as pdf linked on how to do it.)
And now an example for a struct in a struct:
    #include <stdio.h>
    typedef struct{
        char name_cake[10];
        char code_cake[10];
    }cake;
    typedef struct{
        cake the_cake; // the common part
        char cake_extension[10]; // the new part, order is important
    }extended_cake;
    int main() {
        extended_cake an_extended_cake = {{"cakename", "code"}, "extension"};
        // now treat it as a cake
        cake *a_normal_cake = (cake *)&an_extended_cake;
        printf("From cake: %s\n", a_normal_cake->name_cake);
        return 0;
    }
$ gcc -Wall ordercake.c
$ ./a.out
From cake: cakename
$