To solve the optimization problem described, we need to define the decision variables, the objective function, and the constraints.

Let's denote:
- \(x_c\) as the number of chocolate toppings.
- \(x_s\) as the number of strawberry toppings.

The objective is to minimize the total cost of making these toppings. Given that it costs $2 to make one chocolate topping and $3 for one strawberry topping, the objective function can be written as:
\[ \text{Minimize:} \quad 2x_c + 3x_s \]

There are several constraints based on the problem description:
1. **Sugar Constraint**: The total amount of sugar from both types of toppings must be at least 10 grams. Since each chocolate topping contains 1 gram of sugar and each strawberry topping contains 0.5 grams of sugar, this constraint can be written as:
\[ x_c + 0.5x_s \geq 10 \]
2. **Butter Constraint**: The total amount of butter from both types of toppings must be at least 15 grams. Given that each chocolate topping contains 2 grams of butter and each strawberry topping contains 0.7 grams of butter, this constraint can be written as:
\[ 2x_c + 0.7x_s \geq 15 \]
3. **Chocolate Toppings Limit**: There can be at most 5 chocolate toppings on a cake, which gives us the constraint:
\[ x_c \leq 5 \]
4. **Non-Negativity Constraints**: Both \(x_c\) and \(x_s\) must be non-negative since we cannot have a negative number of toppings:
\[ x_c \geq 0 \]
\[ x_s \geq 0 \]

And, because these are toppings, both \(x_c\) and \(x_s\) should also be integers (integer constraints), but for simplicity in solving with linear programming, we'll first solve without considering integer constraints and then assess if the solution requires adjustment to meet integer requirements.

Now, translating this into Gurobi code in Python:

```python
from gurobipy import *

# Create a new model
m = Model("Northwest_Golden_Bakery")

# Define the decision variables
x_c = m.addVar(lb=0, ub=5, vtype=GRB.INTEGER, name="chocolate_toppings")
x_s = m.addVar(lb=0, vtype=GRB.INTEGER, name="strawberry_toppings")

# Set the objective function
m.setObjective(2*x_c + 3*x_s, GRB.MINIMIZE)

# Add constraints
m.addConstr(x_c + 0.5*x_s >= 10, "sugar_constraint")
m.addConstr(2*x_c + 0.7*x_s >= 15, "butter_constraint")

# Optimize the model
m.optimize()

# Print the solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Chocolate Toppings: {x_c.x}")
    print(f"Strawberry Toppings: {x_s.x}")
    print(f"Total Cost: ${2*x_c.x + 3*x_s.x}")
else:
    print("No optimal solution found")

```