Here's the formulation of the linear program and the Gurobi code to solve it:

**Decision Variables:**

* `c`: Number of chocolate toppings
* `s`: Number of strawberry toppings

**Objective Function:**

Minimize the cost: `2c + 3s`

**Constraints:**

* **Sugar:** `1c + 0.5s >= 10` (At least 10 grams of sugar)
* **Butter:** `2c + 0.7s >= 15` (At least 15 grams of butter)
* **Chocolate Limit:** `c <= 5` (At most 5 chocolate toppings)
* **Non-negativity:** `c >= 0`, `s >= 0` (Cannot have negative toppings)


```python
import gurobipy as gp
from gurobipy import GRB

# Create a new model
model = gp.Model("CakeToppings")

# Create variables
c = model.addVar(lb=0, vtype=GRB.CONTINUOUS, name="chocolate_toppings")
s = model.addVar(lb=0, vtype=GRB.CONTINUOUS, name="strawberry_toppings")

# Set objective function
model.setObjective(2*c + 3*s, GRB.MINIMIZE)

# Add constraints
model.addConstr(1*c + 0.5*s >= 10, "sugar_constraint")
model.addConstr(2*c + 0.7*s >= 15, "butter_constraint")
model.addConstr(c <= 5, "chocolate_limit")

# Optimize model
model.optimize()

# Print results
if model.status == GRB.OPTIMAL:
    print(f"Optimal Cost: ${model.objVal}")
    print(f"Chocolate Toppings: {c.x}")
    print(f"Strawberry Toppings: {s.x}")
elif model.status == GRB.INFEASIBLE:
    print("The model is infeasible.")
else:
    print(f"Optimization ended with status {model.status}")

```
